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@amd.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/16043>
This commit is contained in:
Emma Anholt 2021-12-29 14:55:24 -08:00 committed by Marge Bot
parent 73e1a54623
commit 30daa7d6d8
1 changed files with 14 additions and 1 deletions

View File

@ -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,