From 4b84ae157a9b39429c6ab389f118785374848979 Mon Sep 17 00:00:00 2001 From: Danylo Piliaiev Date: Mon, 10 Jul 2023 15:07:39 +0200 Subject: [PATCH] tu/a7xx: Fix CmdDrawIndirectByteCountEXT On a7xx DI_SRC_SEL_AUTO_INDEX is used instead of DI_SRC_SEL_AUTO_XFB. On a7xx the counter value and offset are shifted right by 2, so the vertexStride should also be in units of dwords. CTS doesn't test this though. Fixes: dEQP-VK.transform_feedback.simple.draw_indirect_* Signed-off-by: Danylo Piliaiev Part-of: --- src/freedreno/vulkan/tu_cmd_buffer.cc | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/freedreno/vulkan/tu_cmd_buffer.cc b/src/freedreno/vulkan/tu_cmd_buffer.cc index d1c93ef..e3cfaca 100644 --- a/src/freedreno/vulkan/tu_cmd_buffer.cc +++ b/src/freedreno/vulkan/tu_cmd_buffer.cc @@ -5201,7 +5201,15 @@ tu_CmdDrawIndirectByteCountEXT(VkCommandBuffer commandBuffer, tu6_draw_common(cmd, cs, false, 0); tu_cs_emit_pkt7(cs, CP_DRAW_AUTO, 6); - tu_cs_emit(cs, tu_draw_initiator(cmd, DI_SRC_SEL_AUTO_XFB)); + if (CHIP == A6XX) { + tu_cs_emit(cs, tu_draw_initiator(cmd, DI_SRC_SEL_AUTO_XFB)); + } else { + tu_cs_emit(cs, tu_draw_initiator(cmd, DI_SRC_SEL_AUTO_INDEX)); + /* On a7xx the counter value and offset are shifted right by 2, so + * the vertexStride should also be in units of dwords. + */ + vertexStride = vertexStride >> 2; + } tu_cs_emit(cs, instanceCount); tu_cs_emit_qw(cs, buf->iova + counterBufferOffset); tu_cs_emit(cs, counterOffset); -- 2.7.4