radv: Always emulate fmin/fmax

The native path is not faster and float atomics won't be supported by
ancient glslangValidator versions, so just get rid of it.

Signed-off-by: Konstantin Seurer <konstantin.seurer@gmail.com>
Reviewed-by: Bas Nieuwenhuizen <bas@basnieuwenhuizen.nl>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/17028>
This commit is contained in:
Konstantin Seurer
2022-08-05 20:47:43 +02:00
committed by Marge Bot
parent 4f5da7939c
commit c39271bb4b
+5 -23
View File
@@ -494,14 +494,6 @@ static void
atomic_fminmax(struct radv_device *dev, nir_builder *b, nir_ssa_def *addr, bool is_max,
nir_ssa_def *val)
{
if (radv_has_shader_buffer_float_minmax(dev->physical_device)) {
if (is_max)
nir_global_atomic_fmax(b, 32, addr, val);
else
nir_global_atomic_fmin(b, 32, addr, val);
return;
}
/* Use an integer comparison to work correctly with negative zero. */
val = nir_bcsel(b, nir_ilt(b, val, nir_imm_int(b, 0)),
nir_isub(b, nir_imm_int(b, -2147483648), val), val);
@@ -518,9 +510,6 @@ read_fminmax_atomic(struct radv_device *dev, nir_builder *b, unsigned channels,
nir_ssa_def *val = nir_build_load_global(b, channels, 32, addr,
.access = ACCESS_NON_WRITEABLE | ACCESS_CAN_REORDER);
if (radv_has_shader_buffer_float_minmax(dev->physical_device))
return val;
return nir_bcsel(b, nir_ilt(b, val, nir_imm_int(b, 0)),
nir_isub(b, nir_imm_int(b, -2147483648), val), val);
}
@@ -1448,18 +1437,11 @@ radv_CmdBuildAccelerationStructuresKHR(
if (build_mode != accel_struct_build_unoptimized) {
for (uint32_t i = 0; i < infoCount; ++i) {
if (radv_has_shader_buffer_float_minmax(cmd_buffer->device->physical_device)) {
/* Clear the bvh bounds with nan. */
si_cp_dma_clear_buffer(cmd_buffer, pInfos[i].scratchData.deviceAddress,
6 * sizeof(float), 0x7FC00000);
} else {
/* Clear the bvh bounds with int max/min. */
si_cp_dma_clear_buffer(cmd_buffer, pInfos[i].scratchData.deviceAddress,
3 * sizeof(float), 0x7fffffff);
si_cp_dma_clear_buffer(cmd_buffer,
pInfos[i].scratchData.deviceAddress + 3 * sizeof(float),
3 * sizeof(float), 0x80000000);
}
/* Clear the bvh bounds with int max/min. */
si_cp_dma_clear_buffer(cmd_buffer, pInfos[i].scratchData.deviceAddress, 3 * sizeof(float),
0x7fffffff);
si_cp_dma_clear_buffer(cmd_buffer, pInfos[i].scratchData.deviceAddress + 3 * sizeof(float),
3 * sizeof(float), 0x80000000);
}
cmd_buffer->state.flush_bits |= flush_bits;