Mesa (main): tgsi: Emit ureg HW_ATOMIC decls in range order.
GitLab Mirror
gitlab-mirror at kemper.freedesktop.org
Tue Apr 19 20:44:23 UTC 2022
Module: Mesa
Branch: main
Commit: 30daa7d6d8b6f47f5d1bb9e73c157ef8e314f33e
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=30daa7d6d8b6f47f5d1bb9e73c157ef8e314f33e
Author: Emma Anholt <emma at anholt.net>
Date: Wed Dec 29 14:55:24 2021 -0800
tgsi: Emit ureg HW_ATOMIC decls in range order.
It turns out r600 has a dependency on it.
Reviewed-by: Marek Olšák <marek.olsak at amd.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/16043>
---
src/gallium/auxiliary/tgsi/tgsi_ureg.c | 15 ++++++++++++++-
1 file changed, 14 insertions(+), 1 deletion(-)
diff --git a/src/gallium/auxiliary/tgsi/tgsi_ureg.c b/src/gallium/auxiliary/tgsi/tgsi_ureg.c
index 207fcc45bc6..76c1bd9f47f 100644
--- a/src/gallium/auxiliary/tgsi/tgsi_ureg.c
+++ b/src/gallium/auxiliary/tgsi/tgsi_ureg.c
@@ -98,7 +98,7 @@ struct const_decl {
};
struct hw_atomic_decl {
- struct {
+ struct hw_atomic_decl_range {
unsigned first;
unsigned last;
unsigned array_id;
@@ -1831,6 +1831,14 @@ output_sort(const void *in_a, const void *in_b)
return a->first - b->first;
}
+static int
+atomic_decl_range_sort(const void *in_a, const void *in_b)
+{
+ const struct hw_atomic_decl_range *a = in_a, *b = in_b;
+
+ return a->first - b->first;
+}
+
static void emit_decls( struct ureg_program *ureg )
{
unsigned i,j;
@@ -2014,6 +2022,11 @@ static void emit_decls( struct ureg_program *ureg )
if (decl->nr_hw_atomic_ranges) {
uint j;
+ /* GLSL-to-TGSI generated HW atomic counters in order, and r600 depends
+ * on it.
+ */
+ qsort(decl->hw_atomic_range, decl->nr_hw_atomic_ranges, sizeof(struct hw_atomic_decl_range), atomic_decl_range_sort);
+
for (j = 0; j < decl->nr_hw_atomic_ranges; j++) {
emit_decl_atomic_2d(ureg,
decl->hw_atomic_range[j].first,
More information about the mesa-commit
mailing list