|
|
|
@@ -545,13 +545,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; |
|
|
|
} |
|
|
|
|
|
|
|
@@ -563,7 +562,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 |
|
|
|
@@ -577,15 +576,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; |
|
|
|
} |
|
|
|
|
|
|
|
@@ -806,7 +806,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; |
|
|
|
} |
|
|
|
@@ -817,7 +817,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, |