mirror of
https://github.com/optiscaler/OptiScaler.git
synced 2026-05-04 08:41:43 +00:00
Make use of parts of DirectXHelpers
This commit is contained in:
@@ -153,3 +153,315 @@ void Shader_Dx12::SetBufferState(ID3D12GraphicsCommandList* InCommandList, D3D12
|
||||
|
||||
*BufferState = InState;
|
||||
}
|
||||
|
||||
// From DirectXHelpers.cpp licensed under MIT
|
||||
void Shader_Dx12::CreateShaderResourceView(ID3D12Device* device, ID3D12Resource* tex,
|
||||
D3D12_CPU_DESCRIPTOR_HANDLE srvDescriptor, bool isCubeMap)
|
||||
{
|
||||
if (!device || !tex)
|
||||
throw std::invalid_argument("Direct3D device and resource must be valid");
|
||||
|
||||
#if defined(_MSC_VER) || !defined(_WIN32)
|
||||
const auto desc = tex->GetDesc();
|
||||
#else
|
||||
D3D12_RESOURCE_DESC tmpDesc;
|
||||
const auto& desc = *tex->GetDesc(&tmpDesc);
|
||||
#endif
|
||||
|
||||
if ((desc.Flags & D3D12_RESOURCE_FLAG_DENY_SHADER_RESOURCE) != 0)
|
||||
{
|
||||
LOG_ERROR("ERROR: CreateShaderResourceView called on a resource created without support for SRV");
|
||||
throw std::runtime_error("Can't have D3D12_RESOURCE_FLAG_DENY_SHADER_RESOURCE");
|
||||
}
|
||||
|
||||
D3D12_SHADER_RESOURCE_VIEW_DESC srvDesc = {};
|
||||
srvDesc.Format = TranslateTypelessFormats(desc.Format);
|
||||
srvDesc.Shader4ComponentMapping = D3D12_DEFAULT_SHADER_4_COMPONENT_MAPPING;
|
||||
|
||||
const UINT mipLevels = (desc.MipLevels) ? static_cast<UINT>(desc.MipLevels) : static_cast<UINT>(-1);
|
||||
|
||||
switch (desc.Dimension)
|
||||
{
|
||||
case D3D12_RESOURCE_DIMENSION_TEXTURE1D:
|
||||
if (desc.DepthOrArraySize > 1)
|
||||
{
|
||||
srvDesc.ViewDimension = D3D12_SRV_DIMENSION_TEXTURE1DARRAY;
|
||||
srvDesc.Texture1DArray.MipLevels = mipLevels;
|
||||
srvDesc.Texture1DArray.ArraySize = static_cast<UINT>(desc.DepthOrArraySize);
|
||||
}
|
||||
else
|
||||
{
|
||||
srvDesc.ViewDimension = D3D12_SRV_DIMENSION_TEXTURE1D;
|
||||
srvDesc.Texture1D.MipLevels = mipLevels;
|
||||
}
|
||||
break;
|
||||
|
||||
case D3D12_RESOURCE_DIMENSION_TEXTURE2D:
|
||||
if (isCubeMap)
|
||||
{
|
||||
if (desc.DepthOrArraySize > 6)
|
||||
{
|
||||
srvDesc.ViewDimension = D3D12_SRV_DIMENSION_TEXTURECUBEARRAY;
|
||||
srvDesc.TextureCubeArray.MipLevels = mipLevels;
|
||||
srvDesc.TextureCubeArray.NumCubes = static_cast<UINT>(desc.DepthOrArraySize / 6);
|
||||
}
|
||||
else
|
||||
{
|
||||
srvDesc.ViewDimension = D3D12_SRV_DIMENSION_TEXTURECUBE;
|
||||
srvDesc.TextureCube.MipLevels = mipLevels;
|
||||
}
|
||||
}
|
||||
else if (desc.DepthOrArraySize > 1)
|
||||
{
|
||||
srvDesc.ViewDimension = D3D12_SRV_DIMENSION_TEXTURE2DARRAY;
|
||||
srvDesc.Texture2DArray.MipLevels = mipLevels;
|
||||
srvDesc.Texture2DArray.ArraySize = static_cast<UINT>(desc.DepthOrArraySize);
|
||||
}
|
||||
else
|
||||
{
|
||||
srvDesc.ViewDimension = D3D12_SRV_DIMENSION_TEXTURE2D;
|
||||
srvDesc.Texture2D.MipLevels = mipLevels;
|
||||
}
|
||||
break;
|
||||
|
||||
case D3D12_RESOURCE_DIMENSION_TEXTURE3D:
|
||||
srvDesc.ViewDimension = D3D12_SRV_DIMENSION_TEXTURE3D;
|
||||
srvDesc.Texture3D.MipLevels = mipLevels;
|
||||
break;
|
||||
|
||||
case D3D12_RESOURCE_DIMENSION_BUFFER:
|
||||
LOG_ERROR("ERROR: CreateShaderResourceView cannot be used with DIMENSION_BUFFER. Use "
|
||||
"CreateBufferShaderResourceView.");
|
||||
throw std::invalid_argument("buffer resources not supported");
|
||||
|
||||
case D3D12_RESOURCE_DIMENSION_UNKNOWN:
|
||||
default:
|
||||
LOG_ERROR("ERROR: CreateShaderResourceView cannot be used with DIMENSION_UNKNOWN ({}).",
|
||||
(uint32_t) desc.Dimension);
|
||||
throw std::invalid_argument("unknown resource dimension");
|
||||
}
|
||||
|
||||
device->CreateShaderResourceView(tex, &srvDesc, srvDescriptor);
|
||||
}
|
||||
|
||||
void Shader_Dx12::CreateUnorderedAccessView(ID3D12Device* device, ID3D12Resource* tex,
|
||||
D3D12_CPU_DESCRIPTOR_HANDLE uavDescriptor, uint32_t mipLevel)
|
||||
{
|
||||
if (!device || !tex)
|
||||
throw std::invalid_argument("Direct3D device and resource must be valid");
|
||||
|
||||
#if defined(_MSC_VER) || !defined(_WIN32)
|
||||
const auto desc = tex->GetDesc();
|
||||
#else
|
||||
D3D12_RESOURCE_DESC tmpDesc;
|
||||
const auto& desc = *tex->GetDesc(&tmpDesc);
|
||||
#endif
|
||||
|
||||
if ((desc.Flags & D3D12_RESOURCE_FLAG_ALLOW_UNORDERED_ACCESS) == 0)
|
||||
{
|
||||
LOG_ERROR("ERROR: CreateUnorderedResourceView called on a resource created without support for UAV.");
|
||||
throw std::runtime_error("Requires D3D12_RESOURCE_FLAG_ALLOW_UNORDERED_ACCESS");
|
||||
}
|
||||
|
||||
D3D12_UNORDERED_ACCESS_VIEW_DESC uavDesc = {};
|
||||
uavDesc.Format = TranslateTypelessFormats(desc.Format);
|
||||
|
||||
switch (desc.Dimension)
|
||||
{
|
||||
case D3D12_RESOURCE_DIMENSION_TEXTURE1D:
|
||||
if (desc.DepthOrArraySize > 1)
|
||||
{
|
||||
uavDesc.ViewDimension = D3D12_UAV_DIMENSION_TEXTURE1DARRAY;
|
||||
uavDesc.Texture1DArray.MipSlice = mipLevel;
|
||||
uavDesc.Texture1DArray.FirstArraySlice = 0;
|
||||
uavDesc.Texture1DArray.ArraySize = desc.DepthOrArraySize;
|
||||
}
|
||||
else
|
||||
{
|
||||
uavDesc.ViewDimension = D3D12_UAV_DIMENSION_TEXTURE1D;
|
||||
uavDesc.Texture1D.MipSlice = mipLevel;
|
||||
}
|
||||
break;
|
||||
|
||||
case D3D12_RESOURCE_DIMENSION_TEXTURE2D:
|
||||
if (desc.DepthOrArraySize > 1)
|
||||
{
|
||||
uavDesc.ViewDimension = D3D12_UAV_DIMENSION_TEXTURE2DARRAY;
|
||||
uavDesc.Texture2DArray.MipSlice = mipLevel;
|
||||
uavDesc.Texture2DArray.ArraySize = desc.DepthOrArraySize;
|
||||
}
|
||||
else
|
||||
{
|
||||
uavDesc.ViewDimension = D3D12_UAV_DIMENSION_TEXTURE2D;
|
||||
uavDesc.Texture2D.MipSlice = mipLevel;
|
||||
}
|
||||
break;
|
||||
|
||||
case D3D12_RESOURCE_DIMENSION_TEXTURE3D:
|
||||
uavDesc.ViewDimension = D3D12_UAV_DIMENSION_TEXTURE3D;
|
||||
uavDesc.Texture3D.MipSlice = mipLevel;
|
||||
uavDesc.Texture3D.WSize = desc.DepthOrArraySize;
|
||||
break;
|
||||
|
||||
case D3D12_RESOURCE_DIMENSION_BUFFER:
|
||||
LOG_ERROR("ERROR: CreateUnorderedResourceView cannot be used with DIMENSION_BUFFER. Use "
|
||||
"CreateBufferUnorderedAccessView.");
|
||||
throw std::invalid_argument("buffer resources not supported");
|
||||
|
||||
case D3D12_RESOURCE_DIMENSION_UNKNOWN:
|
||||
default:
|
||||
LOG_ERROR("ERROR: CreateUnorderedResourceView cannot be used with DIMENSION_UNKNOWN ({}).",
|
||||
(uint32_t) desc.Dimension);
|
||||
throw std::invalid_argument("unknown resource dimension");
|
||||
}
|
||||
device->CreateUnorderedAccessView(tex, nullptr, &uavDesc, uavDescriptor);
|
||||
}
|
||||
|
||||
void Shader_Dx12::CreateRenderTargetView(ID3D12Device* device, ID3D12Resource* tex,
|
||||
D3D12_CPU_DESCRIPTOR_HANDLE rtvDescriptor, uint32_t mipLevel)
|
||||
{
|
||||
if (!device || !tex)
|
||||
throw std::invalid_argument("Direct3D device and resource must be valid");
|
||||
|
||||
#if defined(_MSC_VER) || !defined(_WIN32)
|
||||
const auto desc = tex->GetDesc();
|
||||
#else
|
||||
D3D12_RESOURCE_DESC tmpDesc;
|
||||
const auto& desc = *tex->GetDesc(&tmpDesc);
|
||||
#endif
|
||||
|
||||
if ((desc.Flags & D3D12_RESOURCE_FLAG_ALLOW_RENDER_TARGET) == 0)
|
||||
{
|
||||
LOG_ERROR("ERROR: CreateRenderTargetView called on a resource created without support for RTV.");
|
||||
throw std::runtime_error("Requires D3D12_RESOURCE_FLAG_ALLOW_RENDER_TARGET");
|
||||
}
|
||||
|
||||
D3D12_RENDER_TARGET_VIEW_DESC rtvDesc = {};
|
||||
rtvDesc.Format = TranslateTypelessFormats(desc.Format);
|
||||
|
||||
switch (desc.Dimension)
|
||||
{
|
||||
case D3D12_RESOURCE_DIMENSION_TEXTURE1D:
|
||||
if (desc.DepthOrArraySize > 1)
|
||||
{
|
||||
rtvDesc.ViewDimension = D3D12_RTV_DIMENSION_TEXTURE1DARRAY;
|
||||
rtvDesc.Texture1DArray.MipSlice = mipLevel;
|
||||
rtvDesc.Texture1DArray.FirstArraySlice = 0;
|
||||
rtvDesc.Texture1DArray.ArraySize = desc.DepthOrArraySize;
|
||||
}
|
||||
else
|
||||
{
|
||||
rtvDesc.ViewDimension = D3D12_RTV_DIMENSION_TEXTURE1D;
|
||||
rtvDesc.Texture1D.MipSlice = mipLevel;
|
||||
}
|
||||
break;
|
||||
|
||||
case D3D12_RESOURCE_DIMENSION_TEXTURE2D:
|
||||
if (desc.SampleDesc.Count > 1)
|
||||
{
|
||||
if (desc.DepthOrArraySize > 1)
|
||||
{
|
||||
rtvDesc.ViewDimension = D3D12_RTV_DIMENSION_TEXTURE2DMSARRAY;
|
||||
rtvDesc.Texture2DMSArray.ArraySize = desc.DepthOrArraySize;
|
||||
}
|
||||
else
|
||||
{
|
||||
rtvDesc.ViewDimension = D3D12_RTV_DIMENSION_TEXTURE2DMS;
|
||||
}
|
||||
}
|
||||
else if (desc.DepthOrArraySize > 1)
|
||||
{
|
||||
rtvDesc.ViewDimension = D3D12_RTV_DIMENSION_TEXTURE2DARRAY;
|
||||
rtvDesc.Texture2DArray.MipSlice = mipLevel;
|
||||
rtvDesc.Texture2DArray.ArraySize = desc.DepthOrArraySize;
|
||||
}
|
||||
else
|
||||
{
|
||||
rtvDesc.ViewDimension = D3D12_RTV_DIMENSION_TEXTURE2D;
|
||||
rtvDesc.Texture2D.MipSlice = mipLevel;
|
||||
}
|
||||
break;
|
||||
|
||||
case D3D12_RESOURCE_DIMENSION_TEXTURE3D:
|
||||
rtvDesc.ViewDimension = D3D12_RTV_DIMENSION_TEXTURE3D;
|
||||
rtvDesc.Texture3D.MipSlice = mipLevel;
|
||||
rtvDesc.Texture3D.WSize = desc.DepthOrArraySize;
|
||||
break;
|
||||
|
||||
case D3D12_RESOURCE_DIMENSION_BUFFER:
|
||||
LOG_ERROR("ERROR: CreateRenderTargetView cannot be used with DIMENSION_BUFFER.");
|
||||
throw std::invalid_argument("buffer resources not supported");
|
||||
|
||||
case D3D12_RESOURCE_DIMENSION_UNKNOWN:
|
||||
default:
|
||||
LOG_ERROR("ERROR: CreateRenderTargetView cannot be used with DIMENSION_UNKNOWN ({}).",
|
||||
(uint32_t) desc.Dimension);
|
||||
throw std::invalid_argument("unknown resource dimension");
|
||||
}
|
||||
device->CreateRenderTargetView(tex, &rtvDesc, rtvDescriptor);
|
||||
}
|
||||
|
||||
void Shader_Dx12::CreateBufferShaderResourceView(ID3D12Device* device, ID3D12Resource* buffer,
|
||||
D3D12_CPU_DESCRIPTOR_HANDLE srvDescriptor, uint32_t stride)
|
||||
{
|
||||
if (!device || !buffer)
|
||||
throw std::invalid_argument("Direct3D device and resource must be valid");
|
||||
|
||||
#if defined(_MSC_VER) || !defined(_WIN32)
|
||||
const auto desc = buffer->GetDesc();
|
||||
#else
|
||||
D3D12_RESOURCE_DESC tmpDesc;
|
||||
const auto& desc = *buffer->GetDesc(&tmpDesc);
|
||||
#endif
|
||||
|
||||
if (desc.Dimension != D3D12_RESOURCE_DIMENSION_BUFFER ||
|
||||
(desc.Flags & D3D12_RESOURCE_FLAG_DENY_SHADER_RESOURCE) != 0)
|
||||
{
|
||||
LOG_ERROR("ERROR: CreateBufferShaderResourceView called on an unsupported resource.");
|
||||
throw std::runtime_error("invalid buffer resource");
|
||||
}
|
||||
|
||||
D3D12_SHADER_RESOURCE_VIEW_DESC srvDesc = {};
|
||||
srvDesc.Format = DXGI_FORMAT_UNKNOWN;
|
||||
srvDesc.ViewDimension = D3D12_SRV_DIMENSION_BUFFER;
|
||||
srvDesc.Shader4ComponentMapping = D3D12_DEFAULT_SHADER_4_COMPONENT_MAPPING;
|
||||
srvDesc.Buffer.FirstElement = 0;
|
||||
srvDesc.Buffer.NumElements = (stride > 0) ? static_cast<UINT>(desc.Width / stride) : static_cast<UINT>(desc.Width);
|
||||
srvDesc.Buffer.StructureByteStride = stride;
|
||||
|
||||
device->CreateShaderResourceView(buffer, &srvDesc, srvDescriptor);
|
||||
}
|
||||
|
||||
void Shader_Dx12::CreateBufferUnorderedAccessView(ID3D12Device* device, ID3D12Resource* buffer,
|
||||
D3D12_CPU_DESCRIPTOR_HANDLE uavDescriptor, uint32_t stride,
|
||||
D3D12_BUFFER_UAV_FLAGS flag, uint32_t counterOffset,
|
||||
ID3D12Resource* counterResource)
|
||||
{
|
||||
if (!device || !buffer)
|
||||
throw std::invalid_argument("Direct3D device and resource must be valid");
|
||||
|
||||
#if defined(_MSC_VER) || !defined(_WIN32)
|
||||
const auto desc = buffer->GetDesc();
|
||||
#else
|
||||
D3D12_RESOURCE_DESC tmpDesc;
|
||||
const auto& desc = *buffer->GetDesc(&tmpDesc);
|
||||
#endif
|
||||
|
||||
if (desc.Dimension != D3D12_RESOURCE_DIMENSION_BUFFER ||
|
||||
(desc.Flags & D3D12_RESOURCE_FLAG_ALLOW_UNORDERED_ACCESS) == 0)
|
||||
{
|
||||
LOG_ERROR("ERROR: CreateBufferUnorderedAccessView called on an unsupported resource.");
|
||||
throw std::runtime_error("invalid buffer resource");
|
||||
}
|
||||
|
||||
D3D12_UNORDERED_ACCESS_VIEW_DESC uavDesc = {};
|
||||
uavDesc.Format = DXGI_FORMAT_UNKNOWN;
|
||||
uavDesc.ViewDimension = D3D12_UAV_DIMENSION_BUFFER;
|
||||
uavDesc.Buffer.FirstElement = 0;
|
||||
uavDesc.Buffer.NumElements = (stride > 0) ? static_cast<UINT>(desc.Width / stride) : static_cast<UINT>(desc.Width);
|
||||
uavDesc.Buffer.StructureByteStride = stride;
|
||||
uavDesc.Buffer.CounterOffsetInBytes = counterOffset;
|
||||
uavDesc.Buffer.Flags = flag;
|
||||
|
||||
device->CreateUnorderedAccessView(buffer, counterResource, &uavDesc, uavDescriptor);
|
||||
}
|
||||
|
||||
@@ -25,6 +25,23 @@ class Shader_Dx12
|
||||
static void SetBufferState(ID3D12GraphicsCommandList* InCommandList, D3D12_RESOURCE_STATES InState,
|
||||
ID3D12Resource* Buffer, D3D12_RESOURCE_STATES* BufferState);
|
||||
|
||||
void CreateShaderResourceView(ID3D12Device* device, ID3D12Resource* tex, D3D12_CPU_DESCRIPTOR_HANDLE srvDescriptor,
|
||||
bool isCubeMap);
|
||||
|
||||
void CreateUnorderedAccessView(ID3D12Device* device, ID3D12Resource* tex, D3D12_CPU_DESCRIPTOR_HANDLE uavDescriptor,
|
||||
uint32_t mipLevel);
|
||||
|
||||
void CreateRenderTargetView(ID3D12Device* device, ID3D12Resource* tex, D3D12_CPU_DESCRIPTOR_HANDLE rtvDescriptor,
|
||||
uint32_t mipLevel);
|
||||
|
||||
void CreateBufferShaderResourceView(ID3D12Device* device, ID3D12Resource* buffer,
|
||||
D3D12_CPU_DESCRIPTOR_HANDLE srvDescriptor, uint32_t stride);
|
||||
|
||||
void CreateBufferUnorderedAccessView(ID3D12Device* device, ID3D12Resource* buffer,
|
||||
D3D12_CPU_DESCRIPTOR_HANDLE uavDescriptor, uint32_t stride,
|
||||
D3D12_BUFFER_UAV_FLAGS flag, uint32_t counterOffset,
|
||||
ID3D12Resource* counterResource);
|
||||
|
||||
public:
|
||||
bool IsInit() const { return _init; }
|
||||
|
||||
|
||||
@@ -39,25 +39,8 @@ bool Bias_Dx12::Dispatch(ID3D12Device* InDevice, ID3D12GraphicsCommandList* InCm
|
||||
_counter = _counter % BIAS_NUM_OF_HEAPS;
|
||||
FrameDescriptorHeap& currentHeap = _frameHeaps[_counter];
|
||||
|
||||
auto inDesc = InResource->GetDesc();
|
||||
auto outDesc = OutResource->GetDesc();
|
||||
|
||||
// Create SRV for Input Texture
|
||||
D3D12_SHADER_RESOURCE_VIEW_DESC srvDesc = {};
|
||||
srvDesc.Shader4ComponentMapping = D3D12_DEFAULT_SHADER_4_COMPONENT_MAPPING;
|
||||
srvDesc.Format = Shader_Dx12::TranslateTypelessFormats(inDesc.Format);
|
||||
srvDesc.ViewDimension = D3D12_SRV_DIMENSION_TEXTURE2D;
|
||||
srvDesc.Texture2D.MipLevels = 1;
|
||||
|
||||
InDevice->CreateShaderResourceView(InResource, &srvDesc, currentHeap.GetSrvCPU(0));
|
||||
|
||||
// Create UAV for Output Texture
|
||||
D3D12_UNORDERED_ACCESS_VIEW_DESC uavDesc = {};
|
||||
uavDesc.Format = Shader_Dx12::TranslateTypelessFormats(outDesc.Format);
|
||||
uavDesc.ViewDimension = D3D12_UAV_DIMENSION_TEXTURE2D;
|
||||
uavDesc.Texture2D.MipSlice = 0;
|
||||
|
||||
InDevice->CreateUnorderedAccessView(OutResource, nullptr, &uavDesc, currentHeap.GetUavCPU(0));
|
||||
CreateShaderResourceView(InDevice, InResource, currentHeap.GetSrvCPU(0), false);
|
||||
CreateUnorderedAccessView(InDevice, OutResource, currentHeap.GetUavCPU(0), 0);
|
||||
|
||||
InternalConstants constants {};
|
||||
|
||||
@@ -109,6 +92,7 @@ bool Bias_Dx12::Dispatch(ID3D12Device* InDevice, ID3D12GraphicsCommandList* InCm
|
||||
UINT dispatchWidth = 0;
|
||||
UINT dispatchHeight = 0;
|
||||
|
||||
auto inDesc = InResource->GetDesc();
|
||||
dispatchWidth = static_cast<UINT>((inDesc.Width + InNumThreadsX - 1) / InNumThreadsX);
|
||||
dispatchHeight = (inDesc.Height + InNumThreadsY - 1) / InNumThreadsY;
|
||||
|
||||
|
||||
@@ -44,23 +44,8 @@ bool DI_Dx12::Dispatch(ID3D12Device* InDevice, ID3D12GraphicsCommandList* InCmdL
|
||||
_counter = _counter % DI_NUM_OF_HEAPS;
|
||||
FrameDescriptorHeap& currentHeap = _frameHeaps[_counter];
|
||||
|
||||
auto inDesc = InResource->GetDesc();
|
||||
auto outDesc = OutResource->GetDesc();
|
||||
|
||||
// Create SRV for Input Texture
|
||||
D3D12_SHADER_RESOURCE_VIEW_DESC srvDesc = {};
|
||||
srvDesc.Shader4ComponentMapping = D3D12_DEFAULT_SHADER_4_COMPONENT_MAPPING;
|
||||
srvDesc.Format = Shader_Dx12::TranslateTypelessFormats(inDesc.Format);
|
||||
srvDesc.ViewDimension = D3D12_SRV_DIMENSION_TEXTURE2D;
|
||||
srvDesc.Texture2D.MipLevels = 1;
|
||||
InDevice->CreateShaderResourceView(InResource, &srvDesc, currentHeap.GetSrvCPU(0));
|
||||
|
||||
// Create UAV for Output Texture
|
||||
D3D12_UNORDERED_ACCESS_VIEW_DESC uavDesc = {};
|
||||
uavDesc.Format = DXGI_FORMAT_R32_FLOAT;
|
||||
uavDesc.ViewDimension = D3D12_UAV_DIMENSION_TEXTURE2D;
|
||||
uavDesc.Texture2D.MipSlice = 0;
|
||||
InDevice->CreateUnorderedAccessView(OutResource, nullptr, &uavDesc, currentHeap.GetUavCPU(0));
|
||||
CreateShaderResourceView(InDevice, InResource, currentHeap.GetSrvCPU(0), false);
|
||||
CreateUnorderedAccessView(InDevice, OutResource, currentHeap.GetUavCPU(0), 0);
|
||||
|
||||
ID3D12DescriptorHeap* heaps[] = { currentHeap.GetHeapCSU() };
|
||||
InCmdList->SetDescriptorHeaps(_countof(heaps), heaps);
|
||||
@@ -73,6 +58,7 @@ bool DI_Dx12::Dispatch(ID3D12Device* InDevice, ID3D12GraphicsCommandList* InCmdL
|
||||
UINT dispatchWidth = 0;
|
||||
UINT dispatchHeight = 0;
|
||||
|
||||
auto outDesc = OutResource->GetDesc();
|
||||
dispatchWidth = static_cast<UINT>((outDesc.Width + InNumThreadsX - 1) / InNumThreadsX);
|
||||
dispatchHeight = (outDesc.Height + InNumThreadsY - 1) / InNumThreadsY;
|
||||
|
||||
|
||||
@@ -47,23 +47,8 @@ bool DS_Dx12::Dispatch(ID3D12Device* InDevice, ID3D12GraphicsCommandList* InCmdL
|
||||
_counter = _counter % DS_NUM_OF_HEAPS;
|
||||
FrameDescriptorHeap& currentHeap = _frameHeaps[_counter];
|
||||
|
||||
auto inDesc = InResource->GetDesc();
|
||||
auto outDesc = OutResource->GetDesc();
|
||||
|
||||
// Create SRV for Input Texture
|
||||
D3D12_SHADER_RESOURCE_VIEW_DESC srvDesc = {};
|
||||
srvDesc.Shader4ComponentMapping = D3D12_DEFAULT_SHADER_4_COMPONENT_MAPPING;
|
||||
srvDesc.Format = Shader_Dx12::TranslateTypelessFormats(inDesc.Format);
|
||||
srvDesc.ViewDimension = D3D12_SRV_DIMENSION_TEXTURE2D;
|
||||
srvDesc.Texture2D.MipLevels = 1;
|
||||
InDevice->CreateShaderResourceView(InResource, &srvDesc, currentHeap.GetSrvCPU(0));
|
||||
|
||||
// Create UAV for Output Texture
|
||||
D3D12_UNORDERED_ACCESS_VIEW_DESC uavDesc = {};
|
||||
uavDesc.Format = DXGI_FORMAT_R32_FLOAT;
|
||||
uavDesc.ViewDimension = D3D12_UAV_DIMENSION_TEXTURE2D;
|
||||
uavDesc.Texture2D.MipSlice = 0;
|
||||
InDevice->CreateUnorderedAccessView(OutResource, nullptr, &uavDesc, currentHeap.GetUavCPU(0));
|
||||
CreateShaderResourceView(InDevice, InResource, currentHeap.GetSrvCPU(0), false);
|
||||
CreateUnorderedAccessView(InDevice, OutResource, currentHeap.GetUavCPU(0), 0);
|
||||
|
||||
DSConstants constants {};
|
||||
|
||||
|
||||
@@ -75,25 +75,8 @@ bool FT_Dx12::Dispatch(ID3D12Device* InDevice, ID3D12GraphicsCommandList* InCmdL
|
||||
_counter = _counter % FT_NUM_OF_HEAPS;
|
||||
FrameDescriptorHeap& currentHeap = _frameHeaps[_counter];
|
||||
|
||||
auto inDesc = InResource->GetDesc();
|
||||
auto outDesc = OutResource->GetDesc();
|
||||
|
||||
// Create SRV for Input Texture
|
||||
D3D12_SHADER_RESOURCE_VIEW_DESC srvDesc = {};
|
||||
srvDesc.Shader4ComponentMapping = D3D12_DEFAULT_SHADER_4_COMPONENT_MAPPING;
|
||||
srvDesc.Format = Shader_Dx12::TranslateTypelessFormats(inDesc.Format);
|
||||
srvDesc.ViewDimension = D3D12_SRV_DIMENSION_TEXTURE2D;
|
||||
srvDesc.Texture2D.MipLevels = 1;
|
||||
srvDesc.Texture2D.MostDetailedMip = 0;
|
||||
srvDesc.Texture2D.ResourceMinLODClamp = 0.0f;
|
||||
InDevice->CreateShaderResourceView(InResource, &srvDesc, currentHeap.GetSrvCPU(0));
|
||||
|
||||
// Create UAV for Output Texture
|
||||
D3D12_UNORDERED_ACCESS_VIEW_DESC uavDesc = {};
|
||||
uavDesc.Format = Shader_Dx12::TranslateTypelessFormats(outDesc.Format);
|
||||
uavDesc.ViewDimension = D3D12_UAV_DIMENSION_TEXTURE2D;
|
||||
uavDesc.Texture2D.MipSlice = 0;
|
||||
InDevice->CreateUnorderedAccessView(OutResource, nullptr, &uavDesc, currentHeap.GetUavCPU(0));
|
||||
CreateShaderResourceView(InDevice, InResource, currentHeap.GetSrvCPU(0), false);
|
||||
CreateUnorderedAccessView(InDevice, OutResource, currentHeap.GetUavCPU(0), 0);
|
||||
|
||||
ID3D12DescriptorHeap* heaps[] = { currentHeap.GetHeapCSU() };
|
||||
InCmdList->SetDescriptorHeaps(_countof(heaps), heaps);
|
||||
@@ -106,6 +89,7 @@ bool FT_Dx12::Dispatch(ID3D12Device* InDevice, ID3D12GraphicsCommandList* InCmdL
|
||||
UINT dispatchWidth = 0;
|
||||
UINT dispatchHeight = 0;
|
||||
|
||||
auto inDesc = InResource->GetDesc();
|
||||
dispatchWidth = static_cast<UINT>((inDesc.Width + InNumThreadsX - 1) / InNumThreadsX);
|
||||
dispatchHeight = (inDesc.Height + InNumThreadsY - 1) / InNumThreadsY;
|
||||
|
||||
|
||||
@@ -61,28 +61,10 @@ bool HudCopy_Dx12::Dispatch(ID3D12Device* InDevice, ID3D12GraphicsCommandList* c
|
||||
|
||||
ResourceBarrier(cmdList, hudless, hudlessState, D3D12_RESOURCE_STATE_NON_PIXEL_SHADER_RESOURCE);
|
||||
|
||||
auto presentCopyDesc = _buffer->GetDesc();
|
||||
|
||||
// Create SRV for Input Texture
|
||||
D3D12_SHADER_RESOURCE_VIEW_DESC srvDesc1 = {};
|
||||
srvDesc1.Shader4ComponentMapping = D3D12_DEFAULT_SHADER_4_COMPONENT_MAPPING;
|
||||
srvDesc1.Format = Shader_Dx12::TranslateTypelessFormats(hudlessDesc.Format);
|
||||
srvDesc1.ViewDimension = D3D12_SRV_DIMENSION_TEXTURE2D;
|
||||
srvDesc1.Texture2D.MipLevels = 1;
|
||||
InDevice->CreateShaderResourceView(hudless, &srvDesc1, currentHeap.GetSrvCPU(0));
|
||||
|
||||
D3D12_SHADER_RESOURCE_VIEW_DESC srvDesc2 = {};
|
||||
srvDesc2.Shader4ComponentMapping = D3D12_DEFAULT_SHADER_4_COMPONENT_MAPPING;
|
||||
srvDesc2.Format = Shader_Dx12::TranslateTypelessFormats(presentDesc.Format);
|
||||
srvDesc2.ViewDimension = D3D12_SRV_DIMENSION_TEXTURE2D;
|
||||
srvDesc2.Texture2D.MipLevels = 1;
|
||||
InDevice->CreateShaderResourceView(present, &srvDesc2, currentHeap.GetSrvCPU(1));
|
||||
|
||||
// Create UAV for Output Texture
|
||||
D3D12_UNORDERED_ACCESS_VIEW_DESC uavDesc = {};
|
||||
uavDesc.Format = Shader_Dx12::TranslateTypelessFormats(presentCopyDesc.Format);
|
||||
uavDesc.ViewDimension = D3D12_UAV_DIMENSION_TEXTURE2D;
|
||||
InDevice->CreateUnorderedAccessView(_buffer, nullptr, &uavDesc, currentHeap.GetUavCPU(0));
|
||||
// Create views
|
||||
CreateShaderResourceView(InDevice, hudless, currentHeap.GetSrvCPU(0), false);
|
||||
CreateShaderResourceView(InDevice, present, currentHeap.GetSrvCPU(1), false);
|
||||
CreateUnorderedAccessView(InDevice, _buffer, currentHeap.GetUavCPU(0), 0);
|
||||
|
||||
InternalCompareParams constants {};
|
||||
constants.DiffThreshold = hudDetectionThreshold;
|
||||
|
||||
@@ -260,30 +260,9 @@ bool HC_Dx12::Dispatch(IDXGISwapChain3* sc, ID3D12GraphicsCommandList* cmdList,
|
||||
FrameDescriptorHeap& currentHeap = _frameHeaps[_counter];
|
||||
|
||||
// Create views
|
||||
{
|
||||
D3D12_SHADER_RESOURCE_VIEW_DESC srv {};
|
||||
srv.ViewDimension = D3D12_SRV_DIMENSION_TEXTURE2D;
|
||||
srv.Shader4ComponentMapping = D3D12_DEFAULT_SHADER_4_COMPONENT_MAPPING;
|
||||
srv.Texture2D.MipLevels = 1;
|
||||
srv.Format = Shader_Dx12::TranslateTypelessFormats(hudlessDesc.Format);
|
||||
_device->CreateShaderResourceView(hudless, &srv, currentHeap.GetSrvCPU(0));
|
||||
}
|
||||
|
||||
{
|
||||
D3D12_SHADER_RESOURCE_VIEW_DESC srv {};
|
||||
srv.ViewDimension = D3D12_SRV_DIMENSION_TEXTURE2D;
|
||||
srv.Shader4ComponentMapping = D3D12_DEFAULT_SHADER_4_COMPONENT_MAPPING;
|
||||
srv.Texture2D.MipLevels = 1;
|
||||
srv.Format = Shader_Dx12::TranslateTypelessFormats(scDesc.BufferDesc.Format);
|
||||
_device->CreateShaderResourceView(_buffer[_counter], &srv, currentHeap.GetSrvCPU(1));
|
||||
}
|
||||
|
||||
{
|
||||
D3D12_RENDER_TARGET_VIEW_DESC rtv {};
|
||||
rtv.ViewDimension = D3D12_RTV_DIMENSION_TEXTURE2D;
|
||||
rtv.Format = Shader_Dx12::TranslateTypelessFormats(scDesc.BufferDesc.Format);
|
||||
_device->CreateRenderTargetView(scBuffer, &rtv, currentHeap.GetRtvCPU(0));
|
||||
}
|
||||
CreateShaderResourceView(_device, hudless, currentHeap.GetSrvCPU(0), false);
|
||||
CreateShaderResourceView(_device, _buffer[_counter], currentHeap.GetSrvCPU(1), false);
|
||||
CreateRenderTargetView(_device, scBuffer, currentHeap.GetRtvCPU(0), 0);
|
||||
|
||||
InternalCompareParams constants {};
|
||||
constants.DiffThreshold = 0.003f;
|
||||
|
||||
@@ -61,25 +61,8 @@ bool OS_Dx12::Dispatch(ID3D12Device* InDevice, ID3D12GraphicsCommandList* InCmdL
|
||||
_counter = _counter % OS_NUM_OF_HEAPS;
|
||||
FrameDescriptorHeap& currentHeap = _frameHeaps[_counter];
|
||||
|
||||
auto inDesc = InResource->GetDesc();
|
||||
auto outDesc = OutResource->GetDesc();
|
||||
|
||||
// Create SRV for Input Texture
|
||||
D3D12_SHADER_RESOURCE_VIEW_DESC srvDesc = {};
|
||||
srvDesc.Shader4ComponentMapping = D3D12_DEFAULT_SHADER_4_COMPONENT_MAPPING;
|
||||
srvDesc.Format = Shader_Dx12::TranslateTypelessFormats(inDesc.Format);
|
||||
srvDesc.ViewDimension = D3D12_SRV_DIMENSION_TEXTURE2D;
|
||||
srvDesc.Texture2D.MipLevels = 1;
|
||||
|
||||
InDevice->CreateShaderResourceView(InResource, &srvDesc, currentHeap.GetSrvCPU(0));
|
||||
|
||||
// Create UAV for Output Texture
|
||||
D3D12_UNORDERED_ACCESS_VIEW_DESC uavDesc = {};
|
||||
uavDesc.Format = Shader_Dx12::TranslateTypelessFormats(outDesc.Format);
|
||||
uavDesc.ViewDimension = D3D12_UAV_DIMENSION_TEXTURE2D;
|
||||
uavDesc.Texture2D.MipSlice = 0;
|
||||
|
||||
InDevice->CreateUnorderedAccessView(OutResource, nullptr, &uavDesc, currentHeap.GetUavCPU(0));
|
||||
CreateShaderResourceView(InDevice, InResource, currentHeap.GetSrvCPU(0), false);
|
||||
CreateUnorderedAccessView(InDevice, OutResource, currentHeap.GetUavCPU(0), 0);
|
||||
|
||||
FsrEasuCon(fsr1Constants.const0, fsr1Constants.const1, fsr1Constants.const2, fsr1Constants.const3,
|
||||
State::Instance().currentFeature->TargetWidth(), State::Instance().currentFeature->TargetHeight(),
|
||||
|
||||
@@ -191,37 +191,10 @@ bool RCAS_Dx12::DispatchDepthAdaptive(ID3D12Device* InDevice, ID3D12GraphicsComm
|
||||
if (InDepth == nullptr || _pipelineStateDA == nullptr)
|
||||
return false;
|
||||
|
||||
auto inDesc = InResource->GetDesc();
|
||||
auto mvDesc = InMotionVectors->GetDesc();
|
||||
auto depthDesc = InDepth->GetDesc();
|
||||
auto outDesc = OutResource->GetDesc();
|
||||
|
||||
D3D12_SHADER_RESOURCE_VIEW_DESC srvDesc = {};
|
||||
srvDesc.Shader4ComponentMapping = D3D12_DEFAULT_SHADER_4_COMPONENT_MAPPING;
|
||||
srvDesc.Format = Shader_Dx12::TranslateTypelessFormats(inDesc.Format);
|
||||
srvDesc.ViewDimension = D3D12_SRV_DIMENSION_TEXTURE2D;
|
||||
srvDesc.Texture2D.MipLevels = 1;
|
||||
InDevice->CreateShaderResourceView(InResource, &srvDesc, currentHeap.GetSrvCPU(0));
|
||||
|
||||
D3D12_SHADER_RESOURCE_VIEW_DESC mvSrvDesc = {};
|
||||
mvSrvDesc.Shader4ComponentMapping = D3D12_DEFAULT_SHADER_4_COMPONENT_MAPPING;
|
||||
mvSrvDesc.Format = Shader_Dx12::TranslateTypelessFormats(mvDesc.Format);
|
||||
mvSrvDesc.ViewDimension = D3D12_SRV_DIMENSION_TEXTURE2D;
|
||||
mvSrvDesc.Texture2D.MipLevels = 1;
|
||||
InDevice->CreateShaderResourceView(InMotionVectors, &mvSrvDesc, currentHeap.GetSrvCPU(1));
|
||||
|
||||
D3D12_SHADER_RESOURCE_VIEW_DESC depthSrvDesc = {};
|
||||
depthSrvDesc.Shader4ComponentMapping = D3D12_DEFAULT_SHADER_4_COMPONENT_MAPPING;
|
||||
depthSrvDesc.Format = Shader_Dx12::TranslateTypelessFormats(depthDesc.Format);
|
||||
depthSrvDesc.ViewDimension = D3D12_SRV_DIMENSION_TEXTURE2D;
|
||||
depthSrvDesc.Texture2D.MipLevels = 1;
|
||||
InDevice->CreateShaderResourceView(InDepth, &depthSrvDesc, currentHeap.GetSrvCPU(2));
|
||||
|
||||
D3D12_UNORDERED_ACCESS_VIEW_DESC uavDesc = {};
|
||||
uavDesc.Format = Shader_Dx12::TranslateTypelessFormats(outDesc.Format);
|
||||
uavDesc.ViewDimension = D3D12_UAV_DIMENSION_TEXTURE2D;
|
||||
uavDesc.Texture2D.MipSlice = 0;
|
||||
InDevice->CreateUnorderedAccessView(OutResource, nullptr, &uavDesc, currentHeap.GetUavCPU(0));
|
||||
CreateShaderResourceView(InDevice, InResource, currentHeap.GetSrvCPU(0), false);
|
||||
CreateShaderResourceView(InDevice, InMotionVectors, currentHeap.GetSrvCPU(1), false);
|
||||
CreateShaderResourceView(InDevice, InDepth, currentHeap.GetSrvCPU(2), false);
|
||||
CreateUnorderedAccessView(InDevice, OutResource, currentHeap.GetUavCPU(0), 0);
|
||||
|
||||
InternalConstantsDA constants {};
|
||||
FillMotionConstants(constants, InConstants);
|
||||
@@ -261,6 +234,7 @@ bool RCAS_Dx12::DispatchDepthAdaptive(ID3D12Device* InDevice, ID3D12GraphicsComm
|
||||
InCmdList->SetPipelineState(_pipelineStateDA);
|
||||
InCmdList->SetComputeRootDescriptorTable(0, currentHeap.GetTableGPUStart());
|
||||
|
||||
auto inDesc = InResource->GetDesc();
|
||||
UINT dispatchWidth = static_cast<UINT>((inDesc.Width + InNumThreadsX - 1) / InNumThreadsX);
|
||||
UINT dispatchHeight = (inDesc.Height + InNumThreadsY - 1) / InNumThreadsY;
|
||||
InCmdList->Dispatch(dispatchWidth, dispatchHeight, 1);
|
||||
|
||||
@@ -275,30 +275,9 @@ bool RUI_Dx12::Dispatch(IDXGISwapChain3* sc, ID3D12GraphicsCommandList* cmdList,
|
||||
FrameDescriptorHeap& currentHeap = _frameHeaps[_counter];
|
||||
|
||||
// Create views
|
||||
{
|
||||
D3D12_SHADER_RESOURCE_VIEW_DESC srv {};
|
||||
srv.ViewDimension = D3D12_SRV_DIMENSION_TEXTURE2D;
|
||||
srv.Shader4ComponentMapping = D3D12_DEFAULT_SHADER_4_COMPONENT_MAPPING;
|
||||
srv.Texture2D.MipLevels = 1;
|
||||
srv.Format = Shader_Dx12::TranslateTypelessFormats(hudlessDesc.Format);
|
||||
_device->CreateShaderResourceView(hudless, &srv, currentHeap.GetSrvCPU(0));
|
||||
}
|
||||
|
||||
{
|
||||
D3D12_SHADER_RESOURCE_VIEW_DESC srv {};
|
||||
srv.ViewDimension = D3D12_SRV_DIMENSION_TEXTURE2D;
|
||||
srv.Shader4ComponentMapping = D3D12_DEFAULT_SHADER_4_COMPONENT_MAPPING;
|
||||
srv.Texture2D.MipLevels = 1;
|
||||
srv.Format = Shader_Dx12::TranslateTypelessFormats(scDesc.BufferDesc.Format);
|
||||
_device->CreateShaderResourceView(_buffer[_counter], &srv, currentHeap.GetSrvCPU(1));
|
||||
}
|
||||
|
||||
{
|
||||
D3D12_RENDER_TARGET_VIEW_DESC rtv {};
|
||||
rtv.ViewDimension = D3D12_RTV_DIMENSION_TEXTURE2D;
|
||||
rtv.Format = Shader_Dx12::TranslateTypelessFormats(scDesc.BufferDesc.Format);
|
||||
_device->CreateRenderTargetView(scBuffer, &rtv, currentHeap.GetRtvCPU(0));
|
||||
}
|
||||
CreateShaderResourceView(_device, hudless, currentHeap.GetSrvCPU(0), false);
|
||||
CreateShaderResourceView(_device, _buffer[_counter], currentHeap.GetSrvCPU(1), false);
|
||||
CreateRenderTargetView(_device, scBuffer, currentHeap.GetRtvCPU(0), 0);
|
||||
|
||||
ID3D12DescriptorHeap* heaps[] = { currentHeap.GetHeapCSU() };
|
||||
cmdList->SetDescriptorHeaps(_countof(heaps), heaps);
|
||||
|
||||
@@ -21,22 +21,9 @@ bool RF_Dx12::Dispatch(ID3D12Device* InDevice, ID3D12GraphicsCommandList* InCmdL
|
||||
FrameDescriptorHeap& currentHeap = _frameHeaps[_counter];
|
||||
|
||||
auto inDesc = InResource->GetDesc();
|
||||
auto outDesc = OutResource->GetDesc();
|
||||
|
||||
// Create SRV for Input Texture
|
||||
D3D12_SHADER_RESOURCE_VIEW_DESC srvDesc = {};
|
||||
srvDesc.Shader4ComponentMapping = D3D12_DEFAULT_SHADER_4_COMPONENT_MAPPING;
|
||||
srvDesc.Format = Shader_Dx12::TranslateTypelessFormats(inDesc.Format);
|
||||
srvDesc.ViewDimension = D3D12_SRV_DIMENSION_TEXTURE2D;
|
||||
srvDesc.Texture2D.MipLevels = 1;
|
||||
InDevice->CreateShaderResourceView(InResource, &srvDesc, currentHeap.GetSrvCPU(0));
|
||||
|
||||
// Create UAV for Output Texture
|
||||
D3D12_UNORDERED_ACCESS_VIEW_DESC uavDesc = {};
|
||||
uavDesc.Format = Shader_Dx12::TranslateTypelessFormats(outDesc.Format);
|
||||
uavDesc.ViewDimension = D3D12_UAV_DIMENSION_TEXTURE2D;
|
||||
uavDesc.Texture2D.MipSlice = 0;
|
||||
InDevice->CreateUnorderedAccessView(OutResource, nullptr, &uavDesc, currentHeap.GetUavCPU(0));
|
||||
CreateShaderResourceView(InDevice, InResource, currentHeap.GetSrvCPU(0), false);
|
||||
CreateUnorderedAccessView(InDevice, OutResource, currentHeap.GetUavCPU(0), 0);
|
||||
|
||||
RFConstants constants {};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user