summaryrefslogtreecommitdiffstats
path: root/tools
diff options
context:
space:
mode:
authorYong He <yonghe@outlook.com>2022-09-19 17:08:25 -0700
committerGitHub <noreply@github.com>2022-09-19 17:08:25 -0700
commit8e44968be297c0fa0ab00510a5e5922630d8c401 (patch)
treebeaa533082ab8d404dfa9f6a706d1be17997b833 /tools
parent53db0e9e126cb26ffb505e1bf02cc64f00cc9855 (diff)
Fix d3d12 implementation of `uploadBufferData`. (#2402)
* Fix d3d12 implementation of `uploadBufferData`. * Add ICommandBufferD3D12::ensureInternalDescriptorHeapsBound(). Co-authored-by: Yong He <yhe@nvidia.com>
Diffstat (limited to 'tools')
-rw-r--r--tools/gfx/d3d12/d3d12-command-buffer.h1
-rw-r--r--tools/gfx/d3d12/d3d12-helper-functions.cpp13
2 files changed, 9 insertions, 5 deletions
diff --git a/tools/gfx/d3d12/d3d12-command-buffer.h b/tools/gfx/d3d12/d3d12-command-buffer.h
index dbe019807..0b24764c1 100644
--- a/tools/gfx/d3d12/d3d12-command-buffer.h
+++ b/tools/gfx/d3d12/d3d12-command-buffer.h
@@ -49,6 +49,7 @@ public:
void bindDescriptorHeaps();
virtual SLANG_NO_THROW void SLANG_MCALL invalidateDescriptorHeapBinding() override { m_descriptorHeapsBound = false; }
+ virtual SLANG_NO_THROW void SLANG_MCALL ensureInternalDescriptorHeapsBound() override { bindDescriptorHeaps(); }
void reinit();
diff --git a/tools/gfx/d3d12/d3d12-helper-functions.cpp b/tools/gfx/d3d12/d3d12-helper-functions.cpp
index 76e80b017..ee937ed4a 100644
--- a/tools/gfx/d3d12/d3d12-helper-functions.cpp
+++ b/tools/gfx/d3d12/d3d12-helper-functions.cpp
@@ -408,7 +408,10 @@ Result uploadBufferDataImpl(
SLANG_RETURN_ON_FAIL(transientHeap->allocateStagingBuffer(
size, uploadResource, uploadResourceOffset, MemoryType::Upload));
}
-
+ else
+ {
+ uploadResourceOffset = offset;
+ }
D3D12Resource& uploadResourceRef =
(buffer->getDesc()->memoryType == MemoryType::Upload)
? buffer->m_resource
@@ -420,10 +423,10 @@ Result uploadBufferDataImpl(
void* uploadData;
SLANG_RETURN_ON_FAIL(
uploadResourceRef.getResource()->Map(0, &readRange, reinterpret_cast<void**>(&uploadData)));
- memcpy((uint8_t*)uploadData + uploadResourceOffset + offset, data, size);
+ memcpy((uint8_t*)uploadData + uploadResourceOffset, data, size);
D3D12_RANGE writtenRange = {};
- writtenRange.Begin = uploadResourceOffset + offset;
- writtenRange.End = uploadResourceOffset + offset + size;
+ writtenRange.Begin = uploadResourceOffset;
+ writtenRange.End = uploadResourceOffset + size;
uploadResourceRef.getResource()->Unmap(0, &writtenRange);
if (buffer->getDesc()->memoryType != MemoryType::Upload)
@@ -432,7 +435,7 @@ Result uploadBufferDataImpl(
buffer->m_resource.getResource(),
offset,
uploadResourceRef.getResource(),
- uploadResourceOffset + offset,
+ uploadResourceOffset,
size);
}