From e8bf15d107d5d53bc1bf83d2849651db99de8fa1 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Samuel=20Iglesias=20Gons=C3=A1lvez?= Date: Fri, 11 Dec 2020 15:53:50 +0100 Subject: [PATCH] turnip: pCounterBufferOffsets can be NULL on vkCmd*TransformFeedbackEXT() MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit According to the spec for both vkCmd{Begin,End}TransformFeedbackEXT(), if pCounterBufferOffsets is NULL, then it is assumed the offsets are zero. Fixes crash on dEQP-VK.transform_feedback.simple.backward_dependency_no_offset_array Signed-off-by: Samuel Iglesias Gonsálvez Reviewed-by: Connor Abbott Part-of: --- src/freedreno/vulkan/tu_cmd_buffer.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/freedreno/vulkan/tu_cmd_buffer.c b/src/freedreno/vulkan/tu_cmd_buffer.c index cebccb3..a675bc3 100644 --- a/src/freedreno/vulkan/tu_cmd_buffer.c +++ b/src/freedreno/vulkan/tu_cmd_buffer.c @@ -1921,6 +1921,7 @@ tu_CmdBeginTransformFeedbackEXT(VkCommandBuffer commandBuffer, for (uint32_t i = 0; i < counterBufferCount; i++) { uint32_t idx = firstCounterBuffer + i; uint32_t offset = cmd->state.streamout_offset[idx]; + uint64_t counter_buffer_offset = pCounterBufferOffsets ? pCounterBufferOffsets[i] : 0u; if (!pCounterBuffers[i]) continue; @@ -1931,7 +1932,7 @@ tu_CmdBeginTransformFeedbackEXT(VkCommandBuffer commandBuffer, tu_cs_emit(cs, CP_MEM_TO_REG_0_REG(REG_A6XX_VPC_SO_BUFFER_OFFSET(idx)) | CP_MEM_TO_REG_0_UNK31 | CP_MEM_TO_REG_0_CNT(1)); - tu_cs_emit_qw(cs, buf->bo->iova + pCounterBufferOffsets[i]); + tu_cs_emit_qw(cs, buf->bo->iova + counter_buffer_offset); if (offset) { tu_cs_emit_pkt7(cs, CP_REG_RMW, 3); @@ -1969,6 +1970,7 @@ void tu_CmdEndTransformFeedbackEXT(VkCommandBuffer commandBuffer, for (uint32_t i = 0; i < counterBufferCount; i++) { uint32_t idx = firstCounterBuffer + i; uint32_t offset = cmd->state.streamout_offset[idx]; + uint64_t counter_buffer_offset = pCounterBufferOffsets ? pCounterBufferOffsets[i] : 0u; if (!pCounterBuffers[i]) continue; @@ -1995,7 +1997,7 @@ void tu_CmdEndTransformFeedbackEXT(VkCommandBuffer commandBuffer, tu_cs_emit_pkt7(cs, CP_REG_TO_MEM, 3); tu_cs_emit(cs, CP_REG_TO_MEM_0_REG(REG_A6XX_CP_SCRATCH_REG(0)) | CP_REG_TO_MEM_0_CNT(1)); - tu_cs_emit_qw(cs, buf->bo->iova + pCounterBufferOffsets[i]); + tu_cs_emit_qw(cs, buf->bo->iova + counter_buffer_offset); } tu_cond_exec_end(cs); -- 2.7.4