diff options
| author | azhirnov <zh1dron@gmail.com> | 2020-12-16 19:15:15 +0000 |
|---|---|---|
| committer | azhirnov <zh1dron@gmail.com> | 2020-12-16 19:49:06 +0000 |
| commit | e33e75472b2f9b7685e883a591a95ae8967c5ad2 (patch) | |
| tree | b451d014efab65230e33c4c3e5c75a0aea1619e0 /Graphics/GraphicsEngineD3D12 | |
| parent | Updated third-party submodules (diff) | |
| download | DiligentCore-e33e75472b2f9b7685e883a591a95ae8967c5ad2.tar.gz DiligentCore-e33e75472b2f9b7685e883a591a95ae8967c5ad2.zip | |
Fixed validation errors for ray tracing.
Diffstat (limited to 'Graphics/GraphicsEngineD3D12')
| -rw-r--r-- | Graphics/GraphicsEngineD3D12/src/DeviceContextD3D12Impl.cpp | 23 |
1 files changed, 13 insertions, 10 deletions
diff --git a/Graphics/GraphicsEngineD3D12/src/DeviceContextD3D12Impl.cpp b/Graphics/GraphicsEngineD3D12/src/DeviceContextD3D12Impl.cpp index 78320cc1..bf77807a 100644 --- a/Graphics/GraphicsEngineD3D12/src/DeviceContextD3D12Impl.cpp +++ b/Graphics/GraphicsEngineD3D12/src/DeviceContextD3D12Impl.cpp @@ -2631,21 +2631,24 @@ void DeviceContextD3D12Impl::TraceRays(const TraceRaysAttribs& Attribs) auto* pBufferD3D12 = ValidatedCast<BufferD3D12Impl>(pBuffer); const char* OpName = "Trace rays (DeviceContextD3D12Impl::TraceRays)"; - TransitionOrVerifyBufferState(CmdCtx, *pBufferD3D12, Attribs.SBTTransitionMode, RESOURCE_STATE_COPY_DEST, OpName); - // buffer ranges are not intersected, so we don't need to add barriers between them - if (RayGenShaderRecord.pData) - UpdateBuffer(pBufferD3D12, RayGenShaderRecord.Offset, RayGenShaderRecord.Size, RayGenShaderRecord.pData, RESOURCE_STATE_TRANSITION_MODE_VERIFY); + if (RayGenShaderRecord.pData || MissShaderTable.pData || HitGroupTable.pData || CallableShaderTable.pData) + { + TransitionOrVerifyBufferState(CmdCtx, *pBufferD3D12, Attribs.SBTTransitionMode, RESOURCE_STATE_COPY_DEST, OpName); - if (MissShaderTable.pData) - UpdateBuffer(pBufferD3D12, MissShaderTable.Offset, MissShaderTable.Size, MissShaderTable.pData, RESOURCE_STATE_TRANSITION_MODE_VERIFY); + // buffer ranges are not intersected, so we don't need to add barriers between them + if (RayGenShaderRecord.pData) + UpdateBuffer(pBufferD3D12, RayGenShaderRecord.Offset, RayGenShaderRecord.Size, RayGenShaderRecord.pData, RESOURCE_STATE_TRANSITION_MODE_VERIFY); - if (HitGroupTable.pData) - UpdateBuffer(pBufferD3D12, HitGroupTable.Offset, HitGroupTable.Size, HitGroupTable.pData, RESOURCE_STATE_TRANSITION_MODE_VERIFY); + if (MissShaderTable.pData) + UpdateBuffer(pBufferD3D12, MissShaderTable.Offset, MissShaderTable.Size, MissShaderTable.pData, RESOURCE_STATE_TRANSITION_MODE_VERIFY); - if (CallableShaderTable.pData) - UpdateBuffer(pBufferD3D12, CallableShaderTable.Offset, CallableShaderTable.Size, CallableShaderTable.pData, RESOURCE_STATE_TRANSITION_MODE_VERIFY); + if (HitGroupTable.pData) + UpdateBuffer(pBufferD3D12, HitGroupTable.Offset, HitGroupTable.Size, HitGroupTable.pData, RESOURCE_STATE_TRANSITION_MODE_VERIFY); + if (CallableShaderTable.pData) + UpdateBuffer(pBufferD3D12, CallableShaderTable.Offset, CallableShaderTable.Size, CallableShaderTable.pData, RESOURCE_STATE_TRANSITION_MODE_VERIFY); + } TransitionOrVerifyBufferState(CmdCtx, *pBufferD3D12, Attribs.SBTTransitionMode, RESOURCE_STATE_RAY_TRACING, OpName); D3D12_DISPATCH_RAYS_DESC d3d12DispatchDesc = {}; |
