m_context.getDevice(),
m_indirectBuffer->getBoundMemory().getMemory(),
m_indirectBuffer->getBoundMemory().getOffset(),
- dataSize);
+ dataSize + m_offsetInBuffer);
m_vk.cmdBindPipeline(*m_cmdBuffer, vk::VK_PIPELINE_BIND_POINT_GRAPHICS, *m_pipeline);
+
+ if (m_drawType == DRAW_TYPE_INDEXED)
+ {
+ m_vk.cmdBindIndexBuffer(*m_cmdBuffer, m_indexBuffer->object(), DE_NULL, vk::VK_INDEX_TYPE_UINT32);
+ }
+
if (m_isMultiDrawEnabled && m_drawCount <= m_drawIndirectMaxCount)
- m_vk.cmdDrawIndirect(*m_cmdBuffer, m_indirectBuffer->object(), m_offsetInBuffer, m_drawCount, m_strideInBuffer);
+ {
+ switch (m_drawType)
+ {
+ case DRAW_TYPE_SEQUENTIAL:
+ m_vk.cmdDrawIndirect(*m_cmdBuffer, m_indirectBuffer->object(), m_offsetInBuffer, m_drawCount, m_strideInBuffer);
+ break;
+ case DRAW_TYPE_INDEXED:
+ m_vk.cmdDrawIndexedIndirect(*m_cmdBuffer, m_indirectBuffer->object(), m_offsetInBuffer, m_drawCount, m_strideInBuffer);
+ break;
+ default:
+ TCU_FAIL("impossible");
+ }
+ }
else
{
- for(deUint32 drawNdx = 0; drawNdx < m_drawCount; drawNdx++){
- m_vk.cmdDrawIndirect(*m_cmdBuffer, m_indirectBuffer->object(), m_offsetInBuffer + drawNdx*m_strideInBuffer, 1, m_strideInBuffer);
+ for (deUint32 drawNdx = 0; drawNdx < m_drawCount; drawNdx++)
+ {
+ switch (m_drawType)
+ {
+ case DRAW_TYPE_SEQUENTIAL:
+ m_vk.cmdDrawIndirect(*m_cmdBuffer, m_indirectBuffer->object(), m_offsetInBuffer + drawNdx*m_strideInBuffer, 1u, 0u);
+ break;
+ case DRAW_TYPE_INDEXED:
+ m_vk.cmdDrawIndexedIndirect(*m_cmdBuffer, m_indirectBuffer->object(), m_offsetInBuffer + drawNdx*m_strideInBuffer, 1u, 0u);
+ break;
+ default:
+ TCU_FAIL("impossible");
+ }
}
}
m_vk.cmdEndRenderPass(*m_cmdBuffer);
m_context.getDevice(),
m_indirectBuffer->getBoundMemory().getMemory(),
m_indirectBuffer->getBoundMemory().getOffset(),
- dataSize);
+ dataSize + m_offsetInBuffer);
m_vk.cmdBindPipeline(*m_cmdBuffer, vk::VK_PIPELINE_BIND_POINT_GRAPHICS, *m_pipeline);
+
+ if (m_drawType == DRAW_TYPE_INDEXED)
+ {
+ m_vk.cmdBindIndexBuffer(*m_cmdBuffer, m_indexBuffer->object(), DE_NULL, vk::VK_INDEX_TYPE_UINT32);
+ }
+
if (m_isMultiDrawEnabled && m_drawCount <= m_drawIndirectMaxCount)
- m_vk.cmdDrawIndirect(*m_cmdBuffer, m_indirectBuffer->object(), m_offsetInBuffer, m_drawCount, m_strideInBuffer);
+ {
+ switch (m_drawType)
+ {
+ case DRAW_TYPE_SEQUENTIAL:
+ m_vk.cmdDrawIndirect(*m_cmdBuffer, m_indirectBuffer->object(), m_offsetInBuffer, m_drawCount, m_strideInBuffer);
+ break;
+ case DRAW_TYPE_INDEXED:
+ m_vk.cmdDrawIndexedIndirect(*m_cmdBuffer, m_indirectBuffer->object(), m_offsetInBuffer, m_drawCount, m_strideInBuffer);
+ break;
+ default:
+ TCU_FAIL("impossible");
+ }
+ }
else
{
- for (deUint32 drawNdx = 0; drawNdx < m_drawCount; drawNdx++){
- m_vk.cmdDrawIndirect(*m_cmdBuffer, m_indirectBuffer->object(), m_offsetInBuffer + drawNdx*m_strideInBuffer, 1, m_strideInBuffer);
+ for (deUint32 drawNdx = 0; drawNdx < m_drawCount; drawNdx++)
+ {
+ switch (m_drawType)
+ {
+ case DRAW_TYPE_SEQUENTIAL:
+ m_vk.cmdDrawIndirect(*m_cmdBuffer, m_indirectBuffer->object(), m_offsetInBuffer + drawNdx*m_strideInBuffer, 1u, 0u);
+ break;
+ case DRAW_TYPE_INDEXED:
+ m_vk.cmdDrawIndexedIndirect(*m_cmdBuffer, m_indirectBuffer->object(), m_offsetInBuffer + drawNdx*m_strideInBuffer, 1u, 0u);
+ break;
+ default:
+ TCU_FAIL("impossible");
+ }
}
}
m_vk.cmdEndRenderPass(*m_cmdBuffer);