diff options
| author | Yong He <yonghe@outlook.com> | 2022-01-10 13:30:41 -0800 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2022-01-10 13:30:41 -0800 |
| commit | ad9abad220df96d2155f6825f158b7f6327b7ea8 (patch) | |
| tree | 12b146961910c1b4aa6a68b3063ec3e68d2ce23d /tools/gfx/d3d11/render-d3d11.cpp | |
| parent | 0ac19741937e007ebb45791f53d413d21055feda (diff) | |
Various fixes to gfx. (#2074)
* Various gfx fixes.
* Fixup.
Co-authored-by: Yong He <yhe@nvidia.com>
Diffstat (limited to 'tools/gfx/d3d11/render-d3d11.cpp')
| -rw-r--r-- | tools/gfx/d3d11/render-d3d11.cpp | 54 |
1 files changed, 38 insertions, 16 deletions
diff --git a/tools/gfx/d3d11/render-d3d11.cpp b/tools/gfx/d3d11/render-d3d11.cpp index f31cce931..530b67055 100644 --- a/tools/gfx/d3d11/render-d3d11.cpp +++ b/tools/gfx/d3d11/render-d3d11.cpp @@ -228,6 +228,20 @@ protected: { return 0; } + + virtual SLANG_NO_THROW Result SLANG_MCALL + map(MemoryRange* rangeToRead, void** outPointer) override + { + SLANG_UNUSED(rangeToRead); + SLANG_UNUSED(outPointer); + return SLANG_FAIL; + } + + virtual SLANG_NO_THROW Result SLANG_MCALL unmap(MemoryRange* writtenRange) override + { + SLANG_UNUSED(writtenRange); + return SLANG_FAIL; + } }; class TextureResourceImpl : public TextureResource { @@ -1524,7 +1538,7 @@ protected: bufferDesc.defaultState = ResourceState::ConstantBuffer; bufferDesc.allowedStates = ResourceStateSet(ResourceState::ConstantBuffer, ResourceState::CopyDestination); - bufferDesc.cpuAccessFlags |= MemoryType::CpuWrite; + bufferDesc.memoryType = MemoryType::Upload; SLANG_RETURN_ON_FAIL( device->createBufferResource(bufferDesc, nullptr, bufferResourcePtr.writeRef())); m_ordinaryDataBuffer = static_cast<BufferResourceImpl*>(bufferResourcePtr.get()); @@ -2561,16 +2575,19 @@ static int _calcResourceBindFlags(ResourceStateSet allowedStates) return dstFlags; } -static int _calcResourceAccessFlags(int accessFlags) +static int _calcResourceAccessFlags(MemoryType memType) { - switch (accessFlags) - { - case 0: return 0; - case MemoryType::CpuRead: return D3D11_CPU_ACCESS_READ; - case MemoryType::CpuWrite: return D3D11_CPU_ACCESS_WRITE; - case MemoryType::CpuRead | - MemoryType::CpuWrite: return D3D11_CPU_ACCESS_READ | D3D11_CPU_ACCESS_WRITE; - default: assert(!"Invalid flags"); return 0; + switch (memType) + { + case MemoryType::DeviceLocal: + return 0; + case MemoryType::ReadBack: + return D3D11_CPU_ACCESS_READ; + case MemoryType::Upload: + return D3D11_CPU_ACCESS_WRITE; + default: + assert(!"Invalid flags"); + return 0; } } @@ -2616,7 +2633,7 @@ Result D3D11Device::createTextureResource(const ITextureResource::Desc& descIn, subResourcesPtr = subRes.getBuffer(); } - const int accessFlags = _calcResourceAccessFlags(srcDesc.cpuAccessFlags); + const int accessFlags = _calcResourceAccessFlags(srcDesc.memoryType); RefPtr<TextureResourceImpl> texture(new TextureResourceImpl(srcDesc)); @@ -2722,17 +2739,22 @@ Result D3D11Device::createBufferResource(const IBufferResource::Desc& descIn, co bufferDesc.ByteWidth = UINT(alignedSizeInBytes); bufferDesc.BindFlags = d3dBindFlags; // For read we'll need to do some staging - bufferDesc.CPUAccessFlags = - _calcResourceAccessFlags(descIn.cpuAccessFlags & MemoryType::CpuWrite); + bufferDesc.CPUAccessFlags = _calcResourceAccessFlags(descIn.memoryType); bufferDesc.Usage = D3D11_USAGE_DEFAULT; // If written by CPU, make it dynamic - if ((descIn.cpuAccessFlags & MemoryType::CpuWrite) && + if (descIn.memoryType == MemoryType::Upload && !descIn.allowedStates.contains(ResourceState::UnorderedAccess)) { bufferDesc.Usage = D3D11_USAGE_DYNAMIC; } + if (srcDesc.memoryType == MemoryType::ReadBack) + { + bufferDesc.CPUAccessFlags |= D3D11_CPU_ACCESS_READ; + bufferDesc.Usage = D3D11_USAGE_STAGING; + } + switch (descIn.defaultState) { case ResourceState::ConstantBuffer: @@ -2758,7 +2780,7 @@ Result D3D11Device::createBufferResource(const IBufferResource::Desc& descIn, co } } - if (srcDesc.cpuAccessFlags & MemoryType::CpuWrite) + if (srcDesc.memoryType == MemoryType::Upload) { bufferDesc.CPUAccessFlags |= D3D11_CPU_ACCESS_WRITE; } @@ -2771,7 +2793,7 @@ Result D3D11Device::createBufferResource(const IBufferResource::Desc& descIn, co SLANG_RETURN_ON_FAIL(m_device->CreateBuffer(&bufferDesc, initData ? &subResourceData : nullptr, buffer->m_buffer.writeRef())); buffer->m_d3dUsage = bufferDesc.Usage; - if (srcDesc.cpuAccessFlags & MemoryType::CpuRead || bufferDesc.Usage != D3D11_USAGE_DYNAMIC) + if (srcDesc.memoryType == MemoryType::ReadBack || bufferDesc.Usage != D3D11_USAGE_DYNAMIC) { D3D11_BUFFER_DESC bufDesc = {}; bufDesc.BindFlags = 0; |
