mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-05 22:38:05 +02:00
radv: set writes_memory for global memory stores/atomics
Fixes:13ab63bb62('radv: Implement VK_EXT_buffer_device_address.') Signed-off-by: Rhys Perry <pendingchaos02@gmail.com> Reviewed-by: Bas Nieuwenhuizen <bas@basnieuwenhuizen.nl> (cherry picked from commit35fab1ba33)
This commit is contained in:
parent
3ed8c94244
commit
4a0199b6e4
1 changed files with 23 additions and 4 deletions
|
|
@ -151,6 +151,13 @@ set_output_usage_mask(const nir_shader *nir, const nir_intrinsic_instr *instr,
|
|||
((wrmask >> (i * 4)) & 0xf) << comp;
|
||||
}
|
||||
|
||||
static void
|
||||
set_writes_memory(const nir_shader *nir, struct radv_shader_info *info)
|
||||
{
|
||||
if (nir->info.stage == MESA_SHADER_FRAGMENT)
|
||||
info->ps.writes_memory = true;
|
||||
}
|
||||
|
||||
static void
|
||||
gather_intrinsic_store_deref_info(const nir_shader *nir,
|
||||
const nir_intrinsic_instr *instr,
|
||||
|
|
@ -304,8 +311,7 @@ gather_intrinsic_info(const nir_shader *nir, const nir_intrinsic_instr *instr,
|
|||
instr->intrinsic == nir_intrinsic_image_deref_atomic_xor ||
|
||||
instr->intrinsic == nir_intrinsic_image_deref_atomic_exchange ||
|
||||
instr->intrinsic == nir_intrinsic_image_deref_atomic_comp_swap) {
|
||||
if (nir->info.stage == MESA_SHADER_FRAGMENT)
|
||||
info->ps.writes_memory = true;
|
||||
set_writes_memory(nir, info);
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
|
@ -320,15 +326,28 @@ gather_intrinsic_info(const nir_shader *nir, const nir_intrinsic_instr *instr,
|
|||
case nir_intrinsic_ssbo_atomic_xor:
|
||||
case nir_intrinsic_ssbo_atomic_exchange:
|
||||
case nir_intrinsic_ssbo_atomic_comp_swap:
|
||||
if (nir->info.stage == MESA_SHADER_FRAGMENT)
|
||||
info->ps.writes_memory = true;
|
||||
set_writes_memory(nir, info);
|
||||
break;
|
||||
case nir_intrinsic_load_deref:
|
||||
gather_intrinsic_load_deref_info(nir, instr, info);
|
||||
break;
|
||||
case nir_intrinsic_store_deref:
|
||||
gather_intrinsic_store_deref_info(nir, instr, info);
|
||||
/* fallthrough */
|
||||
case nir_intrinsic_deref_atomic_add:
|
||||
case nir_intrinsic_deref_atomic_imin:
|
||||
case nir_intrinsic_deref_atomic_umin:
|
||||
case nir_intrinsic_deref_atomic_imax:
|
||||
case nir_intrinsic_deref_atomic_umax:
|
||||
case nir_intrinsic_deref_atomic_and:
|
||||
case nir_intrinsic_deref_atomic_or:
|
||||
case nir_intrinsic_deref_atomic_xor:
|
||||
case nir_intrinsic_deref_atomic_exchange:
|
||||
case nir_intrinsic_deref_atomic_comp_swap: {
|
||||
if (nir_src_as_deref(instr->src[0])->mode & (nir_var_mem_global | nir_var_mem_ssbo))
|
||||
set_writes_memory(nir, info);
|
||||
break;
|
||||
}
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue