Переглянути джерело

D3D12: Adding dispatch indirect support.

Branimir Karadžić 7 роки тому
батько
коміт
664e212e3c
1 змінених файлів з 11 додано та 9 видалено
  1. 11 9
      src/renderer_d3d12.cpp

+ 11 - 9
src/renderer_d3d12.cpp

@@ -1315,7 +1315,7 @@ namespace bgfx { namespace d3d12
 					| BGFX_CAPS_TEXTURE_3D
 					| BGFX_CAPS_TEXTURE_COMPARE_ALL
 					| BGFX_CAPS_INSTANCING
-//					| BGFX_CAPS_DRAW_INDIRECT
+					| BGFX_CAPS_DRAW_INDIRECT
 					| BGFX_CAPS_VERTEX_ATTRIB_HALF
 					| BGFX_CAPS_VERTEX_ATTRIB_UINT10
 					| BGFX_CAPS_FRAGMENT_DEPTH
@@ -6056,19 +6056,21 @@ data.NumQualityLevels = 0;
 
 					if (isValid(compute.m_indirectBuffer) )
 					{
-						const VertexBufferD3D12& vb = m_vertexBuffers[compute.m_indirectBuffer.idx];
+						const VertexBufferD3D12& indirect = m_vertexBuffers[compute.m_indirectBuffer.idx];
 
 						uint32_t numDrawIndirect = UINT16_MAX == compute.m_numIndirect
-							? vb.m_size/BGFX_CONFIG_DRAW_INDIRECT_STRIDE
+							? indirect.m_size/BGFX_CONFIG_DRAW_INDIRECT_STRIDE
 							: compute.m_numIndirect
 							;
 
-						uint32_t args = compute.m_startIndirect * BGFX_CONFIG_DRAW_INDIRECT_STRIDE;
-						for (uint32_t ii = 0; ii < numDrawIndirect; ++ii)
-						{
-//							m_commandList->ExecuteIndirect(ptr, args);
-							args += BGFX_CONFIG_DRAW_INDIRECT_STRIDE;
-						}
+						m_commandList->ExecuteIndirect(
+							  s_renderD3D12->m_commandSignature[0]
+							, numDrawIndirect
+							, indirect.m_ptr
+							, compute.m_startIndirect * BGFX_CONFIG_DRAW_INDIRECT_STRIDE
+							, NULL
+							, 0
+							);
 					}
 					else
 					{