diff options
Diffstat (limited to 'tools/gfx/d3d12/d3d12-shader-table.cpp')
| -rw-r--r-- | tools/gfx/d3d12/d3d12-shader-table.cpp | 12 |
1 files changed, 11 insertions, 1 deletions
diff --git a/tools/gfx/d3d12/d3d12-shader-table.cpp b/tools/gfx/d3d12/d3d12-shader-table.cpp index 3e49350ab..f54b7c5e9 100644 --- a/tools/gfx/d3d12/d3d12-shader-table.cpp +++ b/tools/gfx/d3d12/d3d12-shader-table.cpp @@ -20,11 +20,14 @@ RefPtr<BufferResource> ShaderTableImpl::createDeviceBuffer( uint32_t raygenTableSize = m_rayGenShaderCount * kRayGenRecordSize; uint32_t missTableSize = m_missShaderCount * D3D12_SHADER_IDENTIFIER_SIZE_IN_BYTES; uint32_t hitgroupTableSize = m_hitGroupCount * D3D12_SHADER_IDENTIFIER_SIZE_IN_BYTES; + uint32_t callableTableSize = m_callableShaderCount * D3D12_SHADER_IDENTIFIER_SIZE_IN_BYTES; m_rayGenTableOffset = 0; m_missTableOffset = raygenTableSize; m_hitGroupTableOffset = (uint32_t)D3DUtil::calcAligned( m_missTableOffset + missTableSize, D3D12_RAYTRACING_SHADER_TABLE_BYTE_ALIGNMENT); - uint32_t tableSize = m_hitGroupTableOffset + hitgroupTableSize; + m_callableTableOffset = (uint32_t)D3DUtil::calcAligned( + m_hitGroupTableOffset + hitgroupTableSize, D3D12_RAYTRACING_SHADER_TABLE_BYTE_ALIGNMENT); + uint32_t tableSize = m_callableTableOffset + callableTableSize; auto pipelineImpl = static_cast<RayTracingPipelineStateImpl*>(pipeline); ComPtr<IBufferResource> bufferResource; @@ -88,6 +91,13 @@ RefPtr<BufferResource> ShaderTableImpl::createDeviceBuffer( m_shaderGroupNames[m_rayGenShaderCount + m_missShaderCount + i], m_recordOverwrites[m_rayGenShaderCount + m_missShaderCount + i]); } + for (uint32_t i = 0; i < m_callableShaderCount; i++) + { + copyShaderIdInto( + stagingBufferPtr + m_callableTableOffset + D3D12_SHADER_IDENTIFIER_SIZE_IN_BYTES * i, + m_shaderGroupNames[m_rayGenShaderCount + m_missShaderCount + m_hitGroupCount + i], + m_recordOverwrites[m_rayGenShaderCount + m_missShaderCount + m_hitGroupCount + i]); + } stagingBuffer->unmap(nullptr); encoder->copyBuffer(bufferResource, 0, stagingBuffer, stagingBufferOffset, tableSize); |
