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:
@@ -98,7 +98,7 @@ struct const_decl {
|
|||||||
};
|
};
|
||||||
|
|
||||||
struct hw_atomic_decl {
|
struct hw_atomic_decl {
|
||||||
struct {
|
struct hw_atomic_decl_range {
|
||||||
unsigned first;
|
unsigned first;
|
||||||
unsigned last;
|
unsigned last;
|
||||||
unsigned array_id;
|
unsigned array_id;
|
||||||
@@ -1831,6 +1831,14 @@ output_sort(const void *in_a, const void *in_b)
|
|||||||
return a->first - b->first;
|
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 )
|
static void emit_decls( struct ureg_program *ureg )
|
||||||
{
|
{
|
||||||
unsigned i,j;
|
unsigned i,j;
|
||||||
@@ -2014,6 +2022,11 @@ static void emit_decls( struct ureg_program *ureg )
|
|||||||
if (decl->nr_hw_atomic_ranges) {
|
if (decl->nr_hw_atomic_ranges) {
|
||||||
uint j;
|
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++) {
|
for (j = 0; j < decl->nr_hw_atomic_ranges; j++) {
|
||||||
emit_decl_atomic_2d(ureg,
|
emit_decl_atomic_2d(ureg,
|
||||||
decl->hw_atomic_range[j].first,
|
decl->hw_atomic_range[j].first,
|
||||||
|
Reference in New Issue
Block a user