163 lines
4.5 KiB
C++
163 lines
4.5 KiB
C++
// This file is part of the FidelityFX Super Resolution 3.1 Unreal Engine Plugin.
|
|
//
|
|
// Copyright (c) 2023-2025 Advanced Micro Devices, Inc. All rights reserved.
|
|
//
|
|
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
// of this software and associated documentation files (the "Software"), to deal
|
|
// in the Software without restriction, including without limitation the rights
|
|
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
// copies of the Software, and to permit persons to whom the Software is
|
|
// furnished to do so, subject to the following conditions:
|
|
// The above copyright notice and this permission notice shall be included in
|
|
// all copies or substantial portions of the Software.
|
|
//
|
|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
// THE SOFTWARE.
|
|
|
|
#include "FFXSharedBackend.h"
|
|
#include "PixelFormat.h"
|
|
#include "RHI.h"
|
|
#if UE_VERSION_OLDER_THAN(5, 0, 0)
|
|
#include "RenderGraphBuilder.h"
|
|
|
|
FRDGBuilder* IFFXSharedBackend::GraphBuilder;
|
|
#endif
|
|
|
|
FFXSHARED_API FfxApiSurfaceFormat GetFFXApiFormat(EPixelFormat UEFormat, bool bSRGB)
|
|
{
|
|
FfxApiSurfaceFormat Format = FFX_API_SURFACE_FORMAT_UNKNOWN;
|
|
switch (UEFormat)
|
|
{
|
|
case PF_R32G32B32A32_UINT:
|
|
Format = FFX_API_SURFACE_FORMAT_R32G32B32A32_UINT;
|
|
break;
|
|
case PF_A32B32G32R32F:
|
|
Format = FFX_API_SURFACE_FORMAT_R32G32B32A32_FLOAT;
|
|
break;
|
|
case PF_FloatRGBA:
|
|
Format = FFX_API_SURFACE_FORMAT_R16G16B16A16_FLOAT;
|
|
break;
|
|
case PF_A2B10G10R10:
|
|
Format = FFX_API_SURFACE_FORMAT_R10G10B10A2_UNORM;
|
|
break;
|
|
case PF_G32R32F:
|
|
Format = FFX_API_SURFACE_FORMAT_R32G32_FLOAT;
|
|
break;
|
|
case PF_R32_UINT:
|
|
Format = FFX_API_SURFACE_FORMAT_R32_UINT;
|
|
break;
|
|
case PF_R8G8B8A8_UINT:
|
|
Format = FFX_API_SURFACE_FORMAT_R8G8B8A8_TYPELESS;
|
|
break;
|
|
case PF_R8G8B8A8:
|
|
if (bSRGB)
|
|
{
|
|
Format = FFX_API_SURFACE_FORMAT_R8G8B8A8_SRGB;
|
|
break;
|
|
}
|
|
case PF_B8G8R8A8:
|
|
Format = FFX_API_SURFACE_FORMAT_R8G8B8A8_UNORM;
|
|
break;
|
|
case PF_FloatR11G11B10:
|
|
case PF_FloatRGB:
|
|
Format = FFX_API_SURFACE_FORMAT_R11G11B10_FLOAT;
|
|
break;
|
|
case PF_G16R16F:
|
|
Format = FFX_API_SURFACE_FORMAT_R16G16_FLOAT;
|
|
break;
|
|
case PF_R16G16_UINT:
|
|
Format = FFX_API_SURFACE_FORMAT_R16G16_UINT;
|
|
break;
|
|
case PF_R16F:
|
|
Format = FFX_API_SURFACE_FORMAT_R16_FLOAT;
|
|
break;
|
|
case PF_R16_UINT:
|
|
Format = FFX_API_SURFACE_FORMAT_R16_UINT;
|
|
break;
|
|
case PF_G16:
|
|
Format = FFX_API_SURFACE_FORMAT_R16_UNORM;
|
|
break;
|
|
case PF_R16G16B16A16_SNORM:
|
|
Format = FFX_API_SURFACE_FORMAT_R16_SNORM;
|
|
break;
|
|
case PF_R8:
|
|
Format = FFX_API_SURFACE_FORMAT_R8_UNORM;
|
|
break;
|
|
case PF_R32_FLOAT:
|
|
Format = FFX_API_SURFACE_FORMAT_R32_FLOAT;
|
|
break;
|
|
case PF_DepthStencil:
|
|
Format = FFX_API_SURFACE_FORMAT_R32_FLOAT;
|
|
break;
|
|
case PF_R8G8:
|
|
Format = FFX_API_SURFACE_FORMAT_R8G8_UNORM;
|
|
break;
|
|
case PF_R8_UINT:
|
|
Format = FFX_API_SURFACE_FORMAT_R8_UINT;
|
|
break;
|
|
case PF_R16G16B16A16_SINT:
|
|
Format = FFX_API_SURFACE_FORMAT_R16G16_SINT;
|
|
break;
|
|
case PF_A16B16G16R16:
|
|
Format = FFX_API_SURFACE_FORMAT_R16G16B16A16_FLOAT;
|
|
break;
|
|
default:
|
|
check(false);
|
|
break;
|
|
}
|
|
return Format;
|
|
}
|
|
|
|
FFXSHARED_API ERHIAccess GetUEAccessState(FfxResourceStates State)
|
|
{
|
|
ERHIAccess Access = ERHIAccess::Unknown;
|
|
|
|
switch (State)
|
|
{
|
|
case FFX_RESOURCE_STATE_UNORDERED_ACCESS:
|
|
Access = ERHIAccess::UAVMask;
|
|
break;
|
|
case FFX_RESOURCE_STATE_PIXEL_READ:
|
|
Access = ERHIAccess::SRVGraphics;
|
|
break;
|
|
case FFX_RESOURCE_STATE_COMPUTE_READ:
|
|
Access = ERHIAccess::SRVCompute;
|
|
break;
|
|
case FFX_RESOURCE_STATE_PIXEL_COMPUTE_READ:
|
|
Access = ERHIAccess::SRVMask;
|
|
break;
|
|
case FFX_RESOURCE_STATE_COPY_SRC:
|
|
Access = ERHIAccess::CopySrc;
|
|
break;
|
|
case FFX_RESOURCE_STATE_COPY_DEST:
|
|
Access = ERHIAccess::CopyDest;
|
|
break;
|
|
case FFX_RESOURCE_STATE_PRESENT:
|
|
Access = ERHIAccess::Present;
|
|
break;
|
|
case FFX_RESOURCE_STATE_COMMON:
|
|
Access = ERHIAccess::SRVMask;
|
|
break;
|
|
case FFX_RESOURCE_STATE_GENERIC_READ:
|
|
#if UE_VERSION_AT_LEAST(5, 1, 0)
|
|
Access = ERHIAccess::ReadOnlyExclusiveComputeMask;
|
|
#else
|
|
Access = ERHIAccess::ReadOnlyExclusiveMask;
|
|
#endif
|
|
break;
|
|
case FFX_RESOURCE_STATE_INDIRECT_ARGUMENT:
|
|
Access = ERHIAccess::IndirectArgs;
|
|
break;
|
|
default:
|
|
Access = ERHIAccess::Unknown;
|
|
break;
|
|
}
|
|
|
|
return Access;
|
|
}
|