From aa3020592964344c7032396d159e4ab2df743587 Mon Sep 17 00:00:00 2001 From: Samuel Pitoiset Date: Wed, 12 Sep 2018 15:40:06 +0200 Subject: [PATCH] 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 Signed-off-by: Samuel Pitoiset Reviewed-by: Bas Nieuwenhuizen --- 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 703112e27af..f027eae8096 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 897e2fc5e19..c490b69f52b 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 { -- 2.30.2