From bd11629739ae2b0619699c765354894ff32dacf1 Mon Sep 17 00:00:00 2001 From: Yong He Date: Thu, 22 Sep 2022 21:54:16 -0700 Subject: GFX: improve d3d12 performance. (#2408) --- tools/gfx/d3d12/d3d12-shader-table.cpp | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) (limited to 'tools/gfx/d3d12/d3d12-shader-table.cpp') diff --git a/tools/gfx/d3d12/d3d12-shader-table.cpp b/tools/gfx/d3d12/d3d12-shader-table.cpp index 2773578b8..3e49350ab 100644 --- a/tools/gfx/d3d12/d3d12-shader-table.cpp +++ b/tools/gfx/d3d12/d3d12-shader-table.cpp @@ -31,6 +31,7 @@ RefPtr ShaderTableImpl::createDeviceBuffer( IBufferResource::Desc bufferDesc = {}; bufferDesc.memoryType = gfx::MemoryType::DeviceLocal; bufferDesc.defaultState = ResourceState::General; + bufferDesc.allowedStates.add(ResourceState::NonPixelShaderResource); bufferDesc.type = IResource::Type::Buffer; bufferDesc.sizeInBytes = tableSize; m_device->createBufferResource(bufferDesc, nullptr, bufferResource.writeRef()); @@ -57,10 +58,6 @@ RefPtr ShaderTableImpl::createDeviceBuffer( void* shaderId = stateObjectProperties->GetShaderIdentifier(name.toWString().begin()); memcpy(dest, shaderId, D3D12_SHADER_IDENTIFIER_SIZE_IN_BYTES); } - else - { - memset(dest, 0, D3D12_SHADER_IDENTIFIER_SIZE_IN_BYTES); - } if (overwrite.size) { memcpy((uint8_t*)dest + overwrite.offset, overwrite.data, overwrite.size); @@ -68,6 +65,8 @@ RefPtr ShaderTableImpl::createDeviceBuffer( }; uint8_t* stagingBufferPtr = (uint8_t*)stagingPtr + stagingBufferOffset; + memset(stagingBufferPtr, 0, tableSize); + for (uint32_t i = 0; i < m_rayGenShaderCount; i++) { copyShaderIdInto( @@ -96,7 +95,7 @@ RefPtr ShaderTableImpl::createDeviceBuffer( 1, bufferResource.readRef(), gfx::ResourceState::CopyDestination, - gfx::ResourceState::ShaderResource); + gfx::ResourceState::NonPixelShaderResource); RefPtr resultPtr = static_cast(bufferResource.get()); return _Move(resultPtr); } -- cgit v1.2.3