tint/hlsl+glsl: fix workgroupUniformLoad polyfills

The BuiltinPolyfill transform expects the DirectVariableAccess transform
to run after it, but this regressed as part of
https://dawn-review.googlesource.com/c/dawn/+/122203

Add unit test along with e2e 1926.wgsl test.

Bug: tint:1926
Change-Id: I5107453ce152b12e6f2f36930846e1fffa775708
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/131020
Reviewed-by: James Price <jrprice@google.com>
Commit-Queue: Antonio Maiorano <amaiorano@google.com>
Kokoro: Kokoro <noreply+kokoro@google.com>
Reviewed-by: Ben Clayton <bclayton@google.com>
This commit is contained in:
Antonio Maiorano
2023-05-03 15:30:54 +00:00
committed by Dawn LUCI CQ
parent e903396ff2
commit fa00fe9d41
63 changed files with 590 additions and 247 deletions

View File

@@ -3,17 +3,17 @@ void unused_entry_point() {
return;
}
typedef int tint_workgroupUniformLoad_ret[4];
tint_workgroupUniformLoad_ret tint_workgroupUniformLoad(inout int p[4]) {
groupshared int v[4];
typedef int tint_workgroupUniformLoad_v_ret[4];
tint_workgroupUniformLoad_v_ret tint_workgroupUniformLoad_v() {
GroupMemoryBarrierWithGroupSync();
const int result[4] = p;
const int result[4] = v;
GroupMemoryBarrierWithGroupSync();
return result;
}
groupshared int v[4];
typedef int foo_ret[4];
foo_ret foo() {
return tint_workgroupUniformLoad(v);
return tint_workgroupUniformLoad_v();
}

View File

@@ -3,17 +3,17 @@ void unused_entry_point() {
return;
}
typedef int tint_workgroupUniformLoad_ret[4];
tint_workgroupUniformLoad_ret tint_workgroupUniformLoad(inout int p[4]) {
groupshared int v[4];
typedef int tint_workgroupUniformLoad_v_ret[4];
tint_workgroupUniformLoad_v_ret tint_workgroupUniformLoad_v() {
GroupMemoryBarrierWithGroupSync();
const int result[4] = p;
const int result[4] = v;
GroupMemoryBarrierWithGroupSync();
return result;
}
groupshared int v[4];
typedef int foo_ret[4];
foo_ret foo() {
return tint_workgroupUniformLoad(v);
return tint_workgroupUniformLoad_v();
}

View File

@@ -4,15 +4,15 @@ layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
void unused_entry_point() {
return;
}
int[4] tint_workgroupUniformLoad(inout int p[4]) {
shared int v[4];
int[4] tint_workgroupUniformLoad_v() {
barrier();
int result[4] = p;
int result[4] = v;
barrier();
return result;
}
shared int v[4];
int[4] foo() {
return tint_workgroupUniformLoad(v);
return tint_workgroupUniformLoad_v();
}

View File

@@ -3,17 +3,17 @@ void unused_entry_point() {
return;
}
typedef int tint_workgroupUniformLoad_ret[128];
tint_workgroupUniformLoad_ret tint_workgroupUniformLoad(inout int p[128]) {
groupshared int v[128];
typedef int tint_workgroupUniformLoad_v_ret[128];
tint_workgroupUniformLoad_v_ret tint_workgroupUniformLoad_v() {
GroupMemoryBarrierWithGroupSync();
const int result[128] = p;
const int result[128] = v;
GroupMemoryBarrierWithGroupSync();
return result;
}
groupshared int v[128];
int foo() {
const int tint_symbol[128] = tint_workgroupUniformLoad(v);
const int tint_symbol[128] = tint_workgroupUniformLoad_v();
return tint_symbol[0];
}

View File

@@ -3,17 +3,17 @@ void unused_entry_point() {
return;
}
typedef int tint_workgroupUniformLoad_ret[128];
tint_workgroupUniformLoad_ret tint_workgroupUniformLoad(inout int p[128]) {
groupshared int v[128];
typedef int tint_workgroupUniformLoad_v_ret[128];
tint_workgroupUniformLoad_v_ret tint_workgroupUniformLoad_v() {
GroupMemoryBarrierWithGroupSync();
const int result[128] = p;
const int result[128] = v;
GroupMemoryBarrierWithGroupSync();
return result;
}
groupshared int v[128];
int foo() {
const int tint_symbol[128] = tint_workgroupUniformLoad(v);
const int tint_symbol[128] = tint_workgroupUniformLoad_v();
return tint_symbol[0];
}

View File

@@ -4,16 +4,16 @@ layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
void unused_entry_point() {
return;
}
int[128] tint_workgroupUniformLoad(inout int p[128]) {
shared int v[128];
int[128] tint_workgroupUniformLoad_v() {
barrier();
int result[128] = p;
int result[128] = v;
barrier();
return result;
}
shared int v[128];
int foo() {
int tint_symbol[128] = tint_workgroupUniformLoad(v);
int tint_symbol[128] = tint_workgroupUniformLoad_v();
return tint_symbol[0];
}

View File

@@ -3,17 +3,17 @@ void unused_entry_point() {
return;
}
typedef int tint_workgroupUniformLoad_ret[128];
tint_workgroupUniformLoad_ret tint_workgroupUniformLoad(inout int p[128]) {
groupshared int v[128];
typedef int tint_workgroupUniformLoad_v_ret[128];
tint_workgroupUniformLoad_v_ret tint_workgroupUniformLoad_v() {
GroupMemoryBarrierWithGroupSync();
const int result[128] = p;
const int result[128] = v;
GroupMemoryBarrierWithGroupSync();
return result;
}
groupshared int v[128];
int foo() {
const int tint_symbol[128] = tint_workgroupUniformLoad(v);
const int tint_symbol[128] = tint_workgroupUniformLoad_v();
return tint_symbol[0];
}

View File

@@ -3,17 +3,17 @@ void unused_entry_point() {
return;
}
typedef int tint_workgroupUniformLoad_ret[128];
tint_workgroupUniformLoad_ret tint_workgroupUniformLoad(inout int p[128]) {
groupshared int v[128];
typedef int tint_workgroupUniformLoad_v_ret[128];
tint_workgroupUniformLoad_v_ret tint_workgroupUniformLoad_v() {
GroupMemoryBarrierWithGroupSync();
const int result[128] = p;
const int result[128] = v;
GroupMemoryBarrierWithGroupSync();
return result;
}
groupshared int v[128];
int foo() {
const int tint_symbol[128] = tint_workgroupUniformLoad(v);
const int tint_symbol[128] = tint_workgroupUniformLoad_v();
return tint_symbol[0];
}

View File

@@ -4,16 +4,16 @@ layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
void unused_entry_point() {
return;
}
int[128] tint_workgroupUniformLoad(inout int p[128]) {
shared int v[128];
int[128] tint_workgroupUniformLoad_v() {
barrier();
int result[128] = p;
int result[128] = v;
barrier();
return result;
}
shared int v[128];
int foo() {
int tint_symbol[128] = tint_workgroupUniformLoad(v);
int tint_symbol[128] = tint_workgroupUniformLoad_v();
return tint_symbol[0];
}

View File

@@ -3,15 +3,15 @@ void unused_entry_point() {
return;
}
bool tint_workgroupUniformLoad(inout bool p) {
groupshared bool v;
bool tint_workgroupUniformLoad_v() {
GroupMemoryBarrierWithGroupSync();
const bool result = p;
const bool result = v;
GroupMemoryBarrierWithGroupSync();
return result;
}
groupshared bool v;
bool foo() {
return tint_workgroupUniformLoad(v);
return tint_workgroupUniformLoad_v();
}

View File

@@ -3,15 +3,15 @@ void unused_entry_point() {
return;
}
bool tint_workgroupUniformLoad(inout bool p) {
groupshared bool v;
bool tint_workgroupUniformLoad_v() {
GroupMemoryBarrierWithGroupSync();
const bool result = p;
const bool result = v;
GroupMemoryBarrierWithGroupSync();
return result;
}
groupshared bool v;
bool foo() {
return tint_workgroupUniformLoad(v);
return tint_workgroupUniformLoad_v();
}

View File

@@ -4,15 +4,15 @@ layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
void unused_entry_point() {
return;
}
bool tint_workgroupUniformLoad(inout bool p) {
shared bool v;
bool tint_workgroupUniformLoad_v() {
barrier();
bool result = p;
bool result = v;
barrier();
return result;
}
shared bool v;
bool foo() {
return tint_workgroupUniformLoad(v);
return tint_workgroupUniformLoad_v();
}

View File

@@ -3,22 +3,30 @@ void unused_entry_point() {
return;
}
int tint_workgroupUniformLoad(inout int p) {
groupshared int a;
int tint_workgroupUniformLoad_a() {
GroupMemoryBarrierWithGroupSync();
const int result = p;
const int result = a;
GroupMemoryBarrierWithGroupSync();
return result;
}
groupshared int a;
groupshared int b;
int tint_workgroupUniformLoad_b() {
GroupMemoryBarrierWithGroupSync();
const int result = b;
GroupMemoryBarrierWithGroupSync();
return result;
}
void foo() {
{
int i = 0;
while (true) {
const int tint_symbol = i;
const int tint_symbol_1 = tint_workgroupUniformLoad(a);
const int tint_symbol_1 = tint_workgroupUniformLoad_a();
if (!((tint_symbol < tint_symbol_1))) {
break;
}
@@ -26,7 +34,7 @@ void foo() {
}
{
const int tint_symbol_2 = i;
const int tint_symbol_3 = tint_workgroupUniformLoad(b);
const int tint_symbol_3 = tint_workgroupUniformLoad_b();
i = (tint_symbol_2 + tint_symbol_3);
}
}

View File

@@ -3,22 +3,30 @@ void unused_entry_point() {
return;
}
int tint_workgroupUniformLoad(inout int p) {
groupshared int a;
int tint_workgroupUniformLoad_a() {
GroupMemoryBarrierWithGroupSync();
const int result = p;
const int result = a;
GroupMemoryBarrierWithGroupSync();
return result;
}
groupshared int a;
groupshared int b;
int tint_workgroupUniformLoad_b() {
GroupMemoryBarrierWithGroupSync();
const int result = b;
GroupMemoryBarrierWithGroupSync();
return result;
}
void foo() {
{
int i = 0;
while (true) {
const int tint_symbol = i;
const int tint_symbol_1 = tint_workgroupUniformLoad(a);
const int tint_symbol_1 = tint_workgroupUniformLoad_a();
if (!((tint_symbol < tint_symbol_1))) {
break;
}
@@ -26,7 +34,7 @@ void foo() {
}
{
const int tint_symbol_2 = i;
const int tint_symbol_3 = tint_workgroupUniformLoad(b);
const int tint_symbol_3 = tint_workgroupUniformLoad_b();
i = (tint_symbol_2 + tint_symbol_3);
}
}

View File

@@ -4,21 +4,28 @@ layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
void unused_entry_point() {
return;
}
int tint_workgroupUniformLoad(inout int p) {
shared int a;
int tint_workgroupUniformLoad_a() {
barrier();
int result = p;
int result = a;
barrier();
return result;
}
shared int a;
shared int b;
int tint_workgroupUniformLoad_b() {
barrier();
int result = b;
barrier();
return result;
}
void foo() {
{
int i = 0;
while (true) {
int tint_symbol = i;
int tint_symbol_1 = tint_workgroupUniformLoad(a);
int tint_symbol_1 = tint_workgroupUniformLoad_a();
if (!((tint_symbol < tint_symbol_1))) {
break;
}
@@ -26,7 +33,7 @@ void foo() {
}
{
int tint_symbol_2 = i;
int tint_symbol_3 = tint_workgroupUniformLoad(b);
int tint_symbol_3 = tint_workgroupUniformLoad_b();
i = (tint_symbol_2 + tint_symbol_3);
}
}

View File

@@ -3,17 +3,17 @@ void unused_entry_point() {
return;
}
bool tint_workgroupUniformLoad(inout bool p) {
groupshared bool v;
bool tint_workgroupUniformLoad_v() {
GroupMemoryBarrierWithGroupSync();
const bool result = p;
const bool result = v;
GroupMemoryBarrierWithGroupSync();
return result;
}
groupshared bool v;
int foo() {
if (tint_workgroupUniformLoad(v)) {
if (tint_workgroupUniformLoad_v()) {
return 42;
}
return 0;

View File

@@ -3,17 +3,17 @@ void unused_entry_point() {
return;
}
bool tint_workgroupUniformLoad(inout bool p) {
groupshared bool v;
bool tint_workgroupUniformLoad_v() {
GroupMemoryBarrierWithGroupSync();
const bool result = p;
const bool result = v;
GroupMemoryBarrierWithGroupSync();
return result;
}
groupshared bool v;
int foo() {
if (tint_workgroupUniformLoad(v)) {
if (tint_workgroupUniformLoad_v()) {
return 42;
}
return 0;

View File

@@ -4,16 +4,16 @@ layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
void unused_entry_point() {
return;
}
bool tint_workgroupUniformLoad(inout bool p) {
shared bool v;
bool tint_workgroupUniformLoad_v() {
barrier();
bool result = p;
bool result = v;
barrier();
return result;
}
shared bool v;
int foo() {
if (tint_workgroupUniformLoad(v)) {
if (tint_workgroupUniformLoad_v()) {
return 42;
}
return 0;

View File

@@ -3,15 +3,15 @@ void unused_entry_point() {
return;
}
float3x3 tint_workgroupUniformLoad(inout float3x3 p) {
groupshared float3x3 v;
float3x3 tint_workgroupUniformLoad_v() {
GroupMemoryBarrierWithGroupSync();
const float3x3 result = p;
const float3x3 result = v;
GroupMemoryBarrierWithGroupSync();
return result;
}
groupshared float3x3 v;
float3x3 foo() {
return tint_workgroupUniformLoad(v);
return tint_workgroupUniformLoad_v();
}

View File

@@ -3,15 +3,15 @@ void unused_entry_point() {
return;
}
float3x3 tint_workgroupUniformLoad(inout float3x3 p) {
groupshared float3x3 v;
float3x3 tint_workgroupUniformLoad_v() {
GroupMemoryBarrierWithGroupSync();
const float3x3 result = p;
const float3x3 result = v;
GroupMemoryBarrierWithGroupSync();
return result;
}
groupshared float3x3 v;
float3x3 foo() {
return tint_workgroupUniformLoad(v);
return tint_workgroupUniformLoad_v();
}

View File

@@ -4,15 +4,15 @@ layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
void unused_entry_point() {
return;
}
mat3 tint_workgroupUniformLoad(inout mat3 p) {
shared mat3 v;
mat3 tint_workgroupUniformLoad_v() {
barrier();
mat3 result = p;
mat3 result = v;
barrier();
return result;
}
shared mat3 v;
mat3 foo() {
return tint_workgroupUniformLoad(v);
return tint_workgroupUniformLoad_v();
}

View File

@@ -12,15 +12,15 @@ struct Outer {
Inner a[4];
};
Outer tint_workgroupUniformLoad(inout Outer p) {
groupshared Outer v;
Outer tint_workgroupUniformLoad_v() {
GroupMemoryBarrierWithGroupSync();
const Outer result = p;
const Outer result = v;
GroupMemoryBarrierWithGroupSync();
return result;
}
groupshared Outer v;
Outer foo() {
return tint_workgroupUniformLoad(v);
return tint_workgroupUniformLoad_v();
}

View File

@@ -12,15 +12,15 @@ struct Outer {
Inner a[4];
};
Outer tint_workgroupUniformLoad(inout Outer p) {
groupshared Outer v;
Outer tint_workgroupUniformLoad_v() {
GroupMemoryBarrierWithGroupSync();
const Outer result = p;
const Outer result = v;
GroupMemoryBarrierWithGroupSync();
return result;
}
groupshared Outer v;
Outer foo() {
return tint_workgroupUniformLoad(v);
return tint_workgroupUniformLoad_v();
}

View File

@@ -14,15 +14,15 @@ struct Outer {
Inner a[4];
};
Outer tint_workgroupUniformLoad(inout Outer p) {
shared Outer v;
Outer tint_workgroupUniformLoad_v() {
barrier();
Outer result = p;
Outer result = v;
barrier();
return result;
}
shared Outer v;
Outer foo() {
return tint_workgroupUniformLoad(v);
return tint_workgroupUniformLoad_v();
}

View File

@@ -3,15 +3,15 @@ void unused_entry_point() {
return;
}
float4 tint_workgroupUniformLoad(inout float4 p) {
groupshared float4 v;
float4 tint_workgroupUniformLoad_v() {
GroupMemoryBarrierWithGroupSync();
const float4 result = p;
const float4 result = v;
GroupMemoryBarrierWithGroupSync();
return result;
}
groupshared float4 v;
float4 foo() {
return tint_workgroupUniformLoad(v);
return tint_workgroupUniformLoad_v();
}

View File

@@ -3,15 +3,15 @@ void unused_entry_point() {
return;
}
float4 tint_workgroupUniformLoad(inout float4 p) {
groupshared float4 v;
float4 tint_workgroupUniformLoad_v() {
GroupMemoryBarrierWithGroupSync();
const float4 result = p;
const float4 result = v;
GroupMemoryBarrierWithGroupSync();
return result;
}
groupshared float4 v;
float4 foo() {
return tint_workgroupUniformLoad(v);
return tint_workgroupUniformLoad_v();
}

View File

@@ -4,15 +4,15 @@ layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
void unused_entry_point() {
return;
}
vec4 tint_workgroupUniformLoad(inout vec4 p) {
shared vec4 v;
vec4 tint_workgroupUniformLoad_v() {
barrier();
vec4 result = p;
vec4 result = v;
barrier();
return result;
}
shared vec4 v;
vec4 foo() {
return tint_workgroupUniformLoad(v);
return tint_workgroupUniformLoad_v();
}

View File

@@ -3,20 +3,21 @@ void unused_entry_point() {
return;
}
int tint_workgroupUniformLoad(inout int p) {
groupshared int v[4];
int tint_workgroupUniformLoad_v_X(uint p[1]) {
GroupMemoryBarrierWithGroupSync();
const int result = p;
const int result = v[p[0]];
GroupMemoryBarrierWithGroupSync();
return result;
}
groupshared int v[4];
int foo_v_X(uint p[1]) {
return tint_workgroupUniformLoad(v[p[0]]);
const uint tint_symbol[1] = {p[0u]};
return tint_workgroupUniformLoad_v_X(tint_symbol);
}
int bar() {
const uint tint_symbol[1] = (uint[1])0;
return foo_v_X(tint_symbol);
const uint tint_symbol_1[1] = (uint[1])0;
return foo_v_X(tint_symbol_1);
}

View File

@@ -3,20 +3,21 @@ void unused_entry_point() {
return;
}
int tint_workgroupUniformLoad(inout int p) {
groupshared int v[4];
int tint_workgroupUniformLoad_v_X(uint p[1]) {
GroupMemoryBarrierWithGroupSync();
const int result = p;
const int result = v[p[0]];
GroupMemoryBarrierWithGroupSync();
return result;
}
groupshared int v[4];
int foo_v_X(uint p[1]) {
return tint_workgroupUniformLoad(v[p[0]]);
const uint tint_symbol[1] = {p[0u]};
return tint_workgroupUniformLoad_v_X(tint_symbol);
}
int bar() {
const uint tint_symbol[1] = (uint[1])0;
return foo_v_X(tint_symbol);
const uint tint_symbol_1[1] = (uint[1])0;
return foo_v_X(tint_symbol_1);
}

View File

@@ -4,20 +4,21 @@ layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
void unused_entry_point() {
return;
}
int tint_workgroupUniformLoad(inout int p) {
shared int v[4];
int tint_workgroupUniformLoad_v_X(uint p[1]) {
barrier();
int result = p;
int result = v[p[0]];
barrier();
return result;
}
shared int v[4];
int foo_v_X(uint p[1]) {
return tint_workgroupUniformLoad(v[p[0]]);
uint tint_symbol[1] = uint[1](p[0u]);
return tint_workgroupUniformLoad_v_X(tint_symbol);
}
int bar() {
uint tint_symbol[1] = uint[1](0u);
return foo_v_X(tint_symbol);
uint tint_symbol_1[1] = uint[1](0u);
return foo_v_X(tint_symbol_1);
}