mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-05 00:58:05 +02:00
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 <mesa-stable@lists.freedesktop.org> Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com> Reviewed-by: Bas Nieuwenhuizen <bas@basnieuwenhuizen.nl>
This commit is contained in:
parent
b9f6521157
commit
aa30205929
2 changed files with 10 additions and 11 deletions
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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 {
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue