Module: Mesa
Branch: master
Commit: aa3020592964344c7032396d159e4ab2df743587
URL:    
http://cgit.freedesktop.org/mesa/mesa/commit/?id=aa3020592964344c7032396d159e4ab2df743587

Author: Samuel Pitoiset <[email protected]>
Date:   Wed Sep 12 15:40:06 2018 +0200

radv: handle loc->indirect correctly for the first descriptor

This was wrong for descriptor #0 when all of them are indirect.
This is because indirect_offset was 0 and we emitted a
"normal" descriptor pointer for nothing.

While we are at it remove
radv_userdata_info::indirect_offset which is useless.

CC: 18.2 <[email protected]>
Signed-off-by: Samuel Pitoiset <[email protected]>
Reviewed-by: Bas Nieuwenhuizen <[email protected]>

---

 src/amd/vulkan/radv_nir_to_llvm.c | 20 ++++++++++----------
 src/amd/vulkan/radv_shader.h      |  1 -
 2 files changed, 10 insertions(+), 11 deletions(-)

diff --git a/src/amd/vulkan/radv_nir_to_llvm.c 
b/src/amd/vulkan/radv_nir_to_llvm.c
index 703112e27a..f027eae809 100644
--- a/src/amd/vulkan/radv_nir_to_llvm.c
+++ b/src/amd/vulkan/radv_nir_to_llvm.c
@@ -539,13 +539,12 @@ create_llvm_function(LLVMContextRef ctx, LLVMModuleRef 
module,
 
 
 static void
-set_loc(struct radv_userdata_info *ud_info, uint8_t *sgpr_idx, uint8_t 
num_sgprs,
-       uint32_t indirect_offset)
+set_loc(struct radv_userdata_info *ud_info, uint8_t *sgpr_idx,
+       uint8_t num_sgprs, bool indirect)
 {
        ud_info->sgpr_idx = *sgpr_idx;
        ud_info->num_sgprs = num_sgprs;
-       ud_info->indirect = indirect_offset > 0;
-       ud_info->indirect_offset = indirect_offset;
+       ud_info->indirect = indirect;
        *sgpr_idx += num_sgprs;
 }
 
@@ -557,7 +556,7 @@ set_loc_shader(struct radv_shader_context *ctx, int idx, 
uint8_t *sgpr_idx,
                &ctx->shader_info->user_sgprs_locs.shader_data[idx];
        assert(ud_info);
 
-       set_loc(ud_info, sgpr_idx, num_sgprs, 0);
+       set_loc(ud_info, sgpr_idx, num_sgprs, false);
 }
 
 static void
@@ -571,15 +570,16 @@ set_loc_shader_ptr(struct radv_shader_context *ctx, int 
idx, uint8_t *sgpr_idx)
 
 static void
 set_loc_desc(struct radv_shader_context *ctx, int idx,  uint8_t *sgpr_idx,
-            uint32_t indirect_offset)
+            bool indirect)
 {
        struct radv_userdata_locations *locs =
                &ctx->shader_info->user_sgprs_locs;
        struct radv_userdata_info *ud_info = &locs->descriptor_sets[idx];
        assert(ud_info);
 
-       set_loc(ud_info, sgpr_idx, HAVE_32BIT_POINTERS ? 1 : 2, 
indirect_offset);
-       if (indirect_offset == 0)
+       set_loc(ud_info, sgpr_idx, HAVE_32BIT_POINTERS ? 1 : 2, indirect);
+
+       if (!indirect)
                locs->descriptor_sets_enabled |= 1 << idx;
 }
 
@@ -800,7 +800,7 @@ set_global_input_locs(struct radv_shader_context *ctx, 
gl_shader_stage stage,
                for (unsigned i = 0; i < num_sets; ++i) {
                        if ((ctx->shader_info->info.desc_set_used_mask & (1 << 
i)) &&
                            ctx->options->layout->set[i].layout->shader_stages 
& stage_mask) {
-                               set_loc_desc(ctx, i, user_sgpr_idx, 0);
+                               set_loc_desc(ctx, i, user_sgpr_idx, false);
                        } else
                                ctx->descriptor_sets[i] = NULL;
                }
@@ -811,7 +811,7 @@ set_global_input_locs(struct radv_shader_context *ctx, 
gl_shader_stage stage,
                for (unsigned i = 0; i < num_sets; ++i) {
                        if ((ctx->shader_info->info.desc_set_used_mask & (1 << 
i)) &&
                            ctx->options->layout->set[i].layout->shader_stages 
& stage_mask) {
-                               set_loc_desc(ctx, i, user_sgpr_idx, i * 8);
+                               set_loc_desc(ctx, i, user_sgpr_idx, true);
                                ctx->descriptor_sets[i] =
                                        ac_build_load_to_sgpr(&ctx->ac,
                                                              desc_sets,
diff --git a/src/amd/vulkan/radv_shader.h b/src/amd/vulkan/radv_shader.h
index 897e2fc5e1..c490b69f52 100644
--- a/src/amd/vulkan/radv_shader.h
+++ b/src/amd/vulkan/radv_shader.h
@@ -192,7 +192,6 @@ struct radv_userdata_info {
        int8_t sgpr_idx;
        uint8_t num_sgprs;
        bool indirect;
-       uint32_t indirect_offset;
 };
 
 struct radv_userdata_locations {

_______________________________________________
mesa-commit mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/mesa-commit

Reply via email to