summaryrefslogtreecommitdiff
path: root/tools/gfx/d3d11/render-d3d11.cpp
diff options
context:
space:
mode:
authorYong He <yonghe@outlook.com>2022-01-10 13:30:41 -0800
committerGitHub <noreply@github.com>2022-01-10 13:30:41 -0800
commitad9abad220df96d2155f6825f158b7f6327b7ea8 (patch)
tree12b146961910c1b4aa6a68b3063ec3e68d2ce23d /tools/gfx/d3d11/render-d3d11.cpp
parent0ac19741937e007ebb45791f53d413d21055feda (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.cpp54
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;