Mesa (master): nir: Allow 64-bit image atomics

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Mon Nov 9 17:35:47 UTC 2020


Module: Mesa
Branch: master
Commit: 5a3e22018d11234bb83c24e153c6c2649aed678f
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=5a3e22018d11234bb83c24e153c6c2649aed678f

Author: Jason Ekstrand <jason at jlekstrand.net>
Date:   Tue Mar 17 17:45:28 2020 -0500

nir: Allow 64-bit image atomics

Reviewed-by: Rhys Perry <pendingchaos02 at gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/7509>

---

 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;
    }
 



More information about the mesa-commit mailing list