mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2025-12-24 02:20:11 +01:00
ir3: Force late-z if FS has global store/atomic
No known tests are fixed. Signed-off-by: Danylo Piliaiev <dpiliaiev@igalia.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/16816>
This commit is contained in:
parent
5067a26f44
commit
79e266fffc
1 changed files with 14 additions and 12 deletions
|
|
@ -2026,6 +2026,14 @@ emit_intrinsic_reduce(struct ir3_context *ctx, nir_intrinsic_instr *intr)
|
|||
static void setup_input(struct ir3_context *ctx, nir_intrinsic_instr *intr);
|
||||
static void setup_output(struct ir3_context *ctx, nir_intrinsic_instr *intr);
|
||||
|
||||
static void
|
||||
switch_to_late_z_if_fs(struct ir3_context *ctx)
|
||||
{
|
||||
if ((ctx->so->type == MESA_SHADER_FRAGMENT) &&
|
||||
!ctx->s->info.fs.early_fragment_tests)
|
||||
ctx->so->no_earlyz = true;
|
||||
}
|
||||
|
||||
static void
|
||||
emit_intrinsic(struct ir3_context *ctx, nir_intrinsic_instr *intr)
|
||||
{
|
||||
|
|
@ -2142,6 +2150,7 @@ emit_intrinsic(struct ir3_context *ctx, nir_intrinsic_instr *intr)
|
|||
break;
|
||||
|
||||
case nir_intrinsic_store_global_ir3:
|
||||
switch_to_late_z_if_fs(ctx);
|
||||
ctx->funcs->emit_intrinsic_store_global_ir3(ctx, intr);
|
||||
break;
|
||||
case nir_intrinsic_load_global_ir3:
|
||||
|
|
@ -2200,9 +2209,7 @@ emit_intrinsic(struct ir3_context *ctx, nir_intrinsic_instr *intr)
|
|||
emit_intrinsic_load_ssbo(ctx, intr, dst);
|
||||
break;
|
||||
case nir_intrinsic_store_ssbo_ir3:
|
||||
if ((ctx->so->type == MESA_SHADER_FRAGMENT) &&
|
||||
!ctx->s->info.fs.early_fragment_tests)
|
||||
ctx->so->no_earlyz = true;
|
||||
switch_to_late_z_if_fs(ctx);
|
||||
ctx->funcs->emit_intrinsic_store_ssbo(ctx, intr);
|
||||
break;
|
||||
case nir_intrinsic_get_ssbo_size:
|
||||
|
|
@ -2218,9 +2225,7 @@ emit_intrinsic(struct ir3_context *ctx, nir_intrinsic_instr *intr)
|
|||
case nir_intrinsic_ssbo_atomic_xor_ir3:
|
||||
case nir_intrinsic_ssbo_atomic_exchange_ir3:
|
||||
case nir_intrinsic_ssbo_atomic_comp_swap_ir3:
|
||||
if ((ctx->so->type == MESA_SHADER_FRAGMENT) &&
|
||||
!ctx->s->info.fs.early_fragment_tests)
|
||||
ctx->so->no_earlyz = true;
|
||||
switch_to_late_z_if_fs(ctx);
|
||||
dst[0] = ctx->funcs->emit_intrinsic_atomic_ssbo(ctx, intr);
|
||||
break;
|
||||
case nir_intrinsic_load_shared:
|
||||
|
|
@ -2253,9 +2258,7 @@ emit_intrinsic(struct ir3_context *ctx, nir_intrinsic_instr *intr)
|
|||
break;
|
||||
case nir_intrinsic_image_store:
|
||||
case nir_intrinsic_bindless_image_store:
|
||||
if ((ctx->so->type == MESA_SHADER_FRAGMENT) &&
|
||||
!ctx->s->info.fs.early_fragment_tests)
|
||||
ctx->so->no_earlyz = true;
|
||||
switch_to_late_z_if_fs(ctx);
|
||||
ctx->funcs->emit_intrinsic_store_image(ctx, intr);
|
||||
break;
|
||||
case nir_intrinsic_image_size:
|
||||
|
|
@ -2282,9 +2285,7 @@ emit_intrinsic(struct ir3_context *ctx, nir_intrinsic_instr *intr)
|
|||
case nir_intrinsic_bindless_image_atomic_exchange:
|
||||
case nir_intrinsic_image_atomic_comp_swap:
|
||||
case nir_intrinsic_bindless_image_atomic_comp_swap:
|
||||
if ((ctx->so->type == MESA_SHADER_FRAGMENT) &&
|
||||
!ctx->s->info.fs.early_fragment_tests)
|
||||
ctx->so->no_earlyz = true;
|
||||
switch_to_late_z_if_fs(ctx);
|
||||
dst[0] = ctx->funcs->emit_intrinsic_atomic_image(ctx, intr);
|
||||
break;
|
||||
case nir_intrinsic_scoped_barrier:
|
||||
|
|
@ -2630,6 +2631,7 @@ emit_intrinsic(struct ir3_context *ctx, nir_intrinsic_instr *intr)
|
|||
case nir_intrinsic_global_atomic_xor_ir3:
|
||||
case nir_intrinsic_global_atomic_exchange_ir3:
|
||||
case nir_intrinsic_global_atomic_comp_swap_ir3: {
|
||||
switch_to_late_z_if_fs(ctx);
|
||||
dst[0] = ctx->funcs->emit_intrinsic_atomic_global(ctx, intr);
|
||||
break;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue