diff --git a/Samples/Desktop/D3D12MeshShaders/src/DynamicLOD/D3D12DynamicLOD.cpp b/Samples/Desktop/D3D12MeshShaders/src/DynamicLOD/D3D12DynamicLOD.cpp index 2ae354c7c..a33fa56e0 100644 --- a/Samples/Desktop/D3D12MeshShaders/src/DynamicLOD/D3D12DynamicLOD.cpp +++ b/Samples/Desktop/D3D12MeshShaders/src/DynamicLOD/D3D12DynamicLOD.cpp @@ -606,17 +606,19 @@ void D3D12DynamicLOD::PopulateCommandList() m_commandList->SetGraphicsRootDescriptorTable(2, m_srvHeap->GetGPUDescriptorHandleForHeapStart()); m_commandList->SetGraphicsRootShaderResourceView(3, m_instanceBuffer->GetGPUVirtualAddress()); - uint32_t dispatchCount = DivRoundUp(m_instanceCount, c_maxGroupDispatchCount); + uint32_t instancesPerDispatch = c_maxGroupDispatchCount * AS_GROUP_SIZE; + uint32_t dispatchCount = DivRoundUp(m_instanceCount, instancesPerDispatch); for (uint32_t i = 0; i < dispatchCount; ++i) { - uint32_t offset = dispatchCount * i; - uint32_t count = min(m_instanceCount - offset, c_maxGroupDispatchCount); + uint32_t offset = instancesPerDispatch * i; + uint32_t count = min(m_instanceCount - offset, instancesPerDispatch); m_commandList->SetGraphicsRoot32BitConstant(1, offset, 0); m_commandList->SetGraphicsRoot32BitConstant(1, count, 1); - m_commandList->DispatchMesh(count, 1, 1); + uint32_t groupCount = DivRoundUp(count, AS_GROUP_SIZE); + m_commandList->DispatchMesh(groupCount, 1, 1); } // Indicate that the back buffer will now be used to present. diff --git a/Samples/Desktop/D3D12MeshShaders/src/DynamicLOD/MeshletAS.hlsl b/Samples/Desktop/D3D12MeshShaders/src/DynamicLOD/MeshletAS.hlsl index 06f5fac10..29d7bdf3b 100644 --- a/Samples/Desktop/D3D12MeshShaders/src/DynamicLOD/MeshletAS.hlsl +++ b/Samples/Desktop/D3D12MeshShaders/src/DynamicLOD/MeshletAS.hlsl @@ -47,10 +47,10 @@ void main(uint dtid : SV_DispatchThreadID, uint gtid : SV_GroupThreadID, uint gi uint lodLevel = MAX_LOD_LEVELS; // LOD level of this thread's instance uint lodOffset = 0; // Offset into its LOD-level instance list - uint instanceIndex = DrawParams.InstanceOffset + dtid; + uint instanceIndex = dtid; if (instanceIndex < DrawParams.InstanceCount) { - Instance instance = Instances[instanceIndex]; + Instance instance = Instances[DrawParams.InstanceOffset + instanceIndex]; if (IsVisible(instance.BoundingSphere)) {