pan/mdg: Read base for combined stores
Fixes depth/stencil writes with MRT.
Fixes: b3d7272753
("pan/mdg: Don't read base for combined stores")
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/16685>
This commit is contained in:
@@ -1959,20 +1959,18 @@ emit_intrinsic(compiler_context *ctx, nir_intrinsic_instr *instr)
|
|||||||
enum midgard_rt_id rt;
|
enum midgard_rt_id rt;
|
||||||
|
|
||||||
unsigned reg_z = ~0, reg_s = ~0, reg_2 = ~0;
|
unsigned reg_z = ~0, reg_s = ~0, reg_2 = ~0;
|
||||||
|
unsigned writeout = PAN_WRITEOUT_C;
|
||||||
if (combined) {
|
if (combined) {
|
||||||
unsigned writeout = nir_intrinsic_component(instr);
|
writeout = nir_intrinsic_component(instr);
|
||||||
if (writeout & PAN_WRITEOUT_Z)
|
if (writeout & PAN_WRITEOUT_Z)
|
||||||
reg_z = nir_src_index(ctx, &instr->src[2]);
|
reg_z = nir_src_index(ctx, &instr->src[2]);
|
||||||
if (writeout & PAN_WRITEOUT_S)
|
if (writeout & PAN_WRITEOUT_S)
|
||||||
reg_s = nir_src_index(ctx, &instr->src[3]);
|
reg_s = nir_src_index(ctx, &instr->src[3]);
|
||||||
if (writeout & PAN_WRITEOUT_2)
|
if (writeout & PAN_WRITEOUT_2)
|
||||||
reg_2 = nir_src_index(ctx, &instr->src[4]);
|
reg_2 = nir_src_index(ctx, &instr->src[4]);
|
||||||
|
}
|
||||||
|
|
||||||
if (writeout & PAN_WRITEOUT_C)
|
if (writeout & PAN_WRITEOUT_C) {
|
||||||
rt = MIDGARD_COLOR_RT0;
|
|
||||||
else
|
|
||||||
rt = MIDGARD_ZS_RT;
|
|
||||||
} else {
|
|
||||||
const nir_variable *var =
|
const nir_variable *var =
|
||||||
nir_find_variable_with_driver_location(ctx->nir, nir_var_shader_out,
|
nir_find_variable_with_driver_location(ctx->nir, nir_var_shader_out,
|
||||||
nir_intrinsic_base(instr));
|
nir_intrinsic_base(instr));
|
||||||
@@ -1982,6 +1980,8 @@ emit_intrinsic(compiler_context *ctx, nir_intrinsic_instr *instr)
|
|||||||
|
|
||||||
rt = MIDGARD_COLOR_RT0 + var->data.location -
|
rt = MIDGARD_COLOR_RT0 + var->data.location -
|
||||||
FRAG_RESULT_DATA0;
|
FRAG_RESULT_DATA0;
|
||||||
|
} else {
|
||||||
|
rt = MIDGARD_ZS_RT;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Dual-source blend writeout is done by leaving the
|
/* Dual-source blend writeout is done by leaving the
|
||||||
|
Reference in New Issue
Block a user