radv: stop using the pipeline layout for inlined push constants with DGC
This only updates the inlined push constants set for DGC and doesn't need the pipeline layout if the index is computed differently. Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/36777>
This commit is contained in:
committed by
Marge Bot
parent
95e387d283
commit
3e0d4a1df1
+12
-15
@@ -1692,7 +1692,6 @@ dgc_emit_push_constant_for_stage(struct dgc_cmdbuf *cs, nir_def *stream_addr, ni
|
||||
const struct dgc_pc_params *params, mesa_shader_stage stage)
|
||||
{
|
||||
const struct radv_indirect_command_layout *layout = cs->layout;
|
||||
VK_FROM_HANDLE(radv_pipeline_layout, pipeline_layout, layout->vk.layout);
|
||||
nir_builder *b = cs->b;
|
||||
|
||||
nir_def *upload_sgpr = dgc_get_upload_sgpr(cs, params->offset, stage);
|
||||
@@ -1711,30 +1710,28 @@ dgc_emit_push_constant_for_stage(struct dgc_cmdbuf *cs, nir_def *stream_addr, ni
|
||||
|
||||
nir_push_if(b, nir_ine_imm(b, inline_sgpr, 0));
|
||||
{
|
||||
nir_variable *pc_idx = nir_variable_create(b->shader, nir_var_shader_temp, glsl_uint_type(), "pc_idx");
|
||||
nir_store_var(b, pc_idx, nir_imm_int(b, 0), 0x1);
|
||||
|
||||
for (uint32_t i = 0; i < pipeline_layout->push_constant_size / 4; i++) {
|
||||
u_foreach_bit64 (i, layout->push_constant_mask) {
|
||||
nir_push_if(b, nir_ine_imm(b, nir_iand_imm(b, inline_mask, 1ull << i), 0));
|
||||
{
|
||||
nir_def *data = NULL;
|
||||
nir_def *data;
|
||||
|
||||
if (layout->sequence_index_mask & (1ull << i)) {
|
||||
data = sequence_id;
|
||||
} else if (layout->push_constant_mask & (1ull << i)) {
|
||||
} else {
|
||||
data = nir_build_load_global(b, 1, 32, nir_iadd_imm(b, stream_addr, layout->push_constant_offsets[i]),
|
||||
.access = ACCESS_NON_WRITEABLE);
|
||||
}
|
||||
|
||||
if (data) {
|
||||
dgc_cs_begin(cs);
|
||||
dgc_cs_emit_imm(PKT3(PKT3_SET_SH_REG, 1, 0));
|
||||
dgc_cs_emit(nir_iadd(b, inline_sgpr, nir_load_var(b, pc_idx)));
|
||||
dgc_cs_emit(data);
|
||||
dgc_cs_end();
|
||||
}
|
||||
/* Determine the inline push constant index by counting the number of bits prior to the
|
||||
* current index because they have to be emitted consecutively.
|
||||
*/
|
||||
nir_def *pc_idx = nir_bit_count(b, nir_iand_imm(b, inline_mask, BITFIELD64_MASK(i)));
|
||||
|
||||
nir_store_var(b, pc_idx, nir_iadd_imm(b, nir_load_var(b, pc_idx), 1), 0x1);
|
||||
dgc_cs_begin(cs);
|
||||
dgc_cs_emit_imm(PKT3(PKT3_SET_SH_REG, 1, 0));
|
||||
dgc_cs_emit(nir_iadd(b, inline_sgpr, pc_idx));
|
||||
dgc_cs_emit(data);
|
||||
dgc_cs_end();
|
||||
}
|
||||
nir_pop_if(b, NULL);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user