Module: Mesa
Branch: main
Commit: 926f626b95a3fab3992361c0120a73b047d24717
URL:    
http://cgit.freedesktop.org/mesa/mesa/commit/?id=926f626b95a3fab3992361c0120a73b047d24717

Author: Danylo Piliaiev <[email protected]>
Date:   Thu Jan 19 19:59:24 2023 +0100

tu/kgsl: do not use kgsl_command_object::offset

offset field in kgsl_command_object is NOT used by KGSL, so
we should offset directly to iova.

Fixes weird hangs on KGSL. E.g. fixes the hang in:
 dEQP-VK.memory.pipeline_barrier.transfer_dst_storage_texel_buffer.1024

cc: mesa-stable

Signed-off-by: Danylo Piliaiev <[email protected]>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/20795>

---

 src/freedreno/vulkan/tu_kgsl.c | 13 +++++++------
 1 file changed, 7 insertions(+), 6 deletions(-)

diff --git a/src/freedreno/vulkan/tu_kgsl.c b/src/freedreno/vulkan/tu_kgsl.c
index 08f82f69bea..8344d8c9f81 100644
--- a/src/freedreno/vulkan/tu_kgsl.c
+++ b/src/freedreno/vulkan/tu_kgsl.c
@@ -452,8 +452,8 @@ tu_QueueSubmit2(VkQueue _queue,
                
&cmdbuf->device->perfcntrs_pass_cs_entries[perf_info->counterPassIndex];
 
             cmds[entry_idx++] = (struct kgsl_command_object) {
-               .offset = perf_cs_entry->offset,
-               .gpuaddr = perf_cs_entry->bo->iova,
+               .offset = 0, // KGSL doesn't use offset
+               .gpuaddr = perf_cs_entry->bo->iova + perf_cs_entry->offset,
                .size = perf_cs_entry->size,
                .flags = KGSL_CMDLIST_IB,
                .id = perf_cs_entry->bo->gem_handle,
@@ -462,8 +462,8 @@ tu_QueueSubmit2(VkQueue _queue,
 
          for (unsigned k = 0; k < cs->entry_count; k++) {
             cmds[entry_idx++] = (struct kgsl_command_object) {
-               .offset = cs->entries[k].offset,
-               .gpuaddr = cs->entries[k].bo->iova,
+               .offset = 0, // KGSL doesn't use offset
+               .gpuaddr = cs->entries[k].bo->iova + cs->entries[k].offset,
                .size = cs->entries[k].size,
                .flags = KGSL_CMDLIST_IB,
                .id = cs->entries[k].bo->gem_handle,
@@ -478,8 +478,9 @@ tu_QueueSubmit2(VkQueue _queue,
                                   cmd_buffers,
                                   cmdbuf_count);
          cmds[entry_idx++] = (struct kgsl_command_object) {
-            .offset = autotune_cs->entries[0].offset,
-            .gpuaddr = autotune_cs->entries[0].bo->iova,
+            .offset = 0, // KGSL doesn't use offset
+            .gpuaddr = autotune_cs->entries[0].bo->iova +
+                       autotune_cs->entries[0].offset,
             .size = autotune_cs->entries[0].size,
             .flags = KGSL_CMDLIST_IB,
             .id = autotune_cs->entries[0].bo->gem_handle,

Reply via email to