From 5a3e22018d11234bb83c24e153c6c2649aed678f Mon Sep 17 00:00:00 2001 From: Jason Ekstrand Date: Tue, 17 Mar 2020 17:45:28 -0500 Subject: [PATCH] nir: Allow 64-bit image atomics Reviewed-by: Rhys Perry Part-of: --- src/compiler/nir/nir_validate.c | 26 +++++++++++++++++--------- 1 file changed, 17 insertions(+), 9 deletions(-) diff --git a/src/compiler/nir/nir_validate.c b/src/compiler/nir/nir_validate.c index 2b0df24405a..b974bc9f46d 100644 --- a/src/compiler/nir/nir_validate.c +++ b/src/compiler/nir/nir_validate.c @@ -722,10 +722,14 @@ validate_intrinsic_instr(nir_intrinsic_instr *instr, validate_state *state) case nir_intrinsic_bindless_image_atomic_xor: case nir_intrinsic_bindless_image_atomic_comp_swap: { enum pipe_format format = image_intrin_format(instr); - validate_assert(state, format == PIPE_FORMAT_COUNT || - format == PIPE_FORMAT_R32_UINT || - format == PIPE_FORMAT_R32_SINT); - validate_assert(state, nir_dest_bit_size(instr->dest) == 32); + if (format != PIPE_FORMAT_COUNT) { + validate_assert(state, format == PIPE_FORMAT_R32_UINT || + format == PIPE_FORMAT_R32_SINT || + format == PIPE_FORMAT_R64_UINT || + format == PIPE_FORMAT_R64_SINT); + validate_assert(state, nir_dest_bit_size(instr->dest) == + util_format_get_blocksizebits(format)); + } break; } @@ -733,11 +737,15 @@ validate_intrinsic_instr(nir_intrinsic_instr *instr, validate_state *state) case nir_intrinsic_image_atomic_exchange: case nir_intrinsic_bindless_image_atomic_exchange: { enum pipe_format format = image_intrin_format(instr); - validate_assert(state, format == PIPE_FORMAT_COUNT || - format == PIPE_FORMAT_R32_UINT || - format == PIPE_FORMAT_R32_SINT || - format == PIPE_FORMAT_R32_FLOAT); - validate_assert(state, nir_dest_bit_size(instr->dest) == 32); + if (format != PIPE_FORMAT_COUNT) { + validate_assert(state, format == PIPE_FORMAT_R32_UINT || + format == PIPE_FORMAT_R32_SINT || + format == PIPE_FORMAT_R32_FLOAT || + format == PIPE_FORMAT_R64_UINT || + format == PIPE_FORMAT_R64_SINT); + validate_assert(state, nir_dest_bit_size(instr->dest) == + util_format_get_blocksizebits(format)); + } break; }