Move global var validation from Validator to Resolver

* Moved global variable resolving logic to new function Resolver::GlobalVariable, and moved validation logic there.
* Moved global variable-related tests to resolver tests.
* Fixed many tests that started failing after this change, mainly because many globals were declared with no storage class. I set most of these to "Input".

Bug: tint:642
Change-Id: I0f8ea2091ed2bb3faa358f9497cd884b2994a40f
Reviewed-on: https://dawn-review.googlesource.com/c/tint/+/46940
Kokoro: Kokoro <noreply+kokoro@google.com>
Reviewed-by: Ben Clayton <bclayton@google.com>
Commit-Queue: Antonio Maiorano <amaiorano@google.com>
This commit is contained in:
Antonio Maiorano
2021-04-06 20:18:57 +00:00
committed by Commit Bot service account
parent 4f154a839d
commit bbbb0edec2
29 changed files with 366 additions and 400 deletions

View File

@@ -50,11 +50,11 @@ fn f() -> void {
TEST_F(BoundArrayAccessorsTest, Array_Idx_Nested_Scalar) {
auto* src = R"(
var a : array<f32, 3>;
var<in> a : array<f32, 3>;
var b : array<f32, 5>;
var<in> b : array<f32, 5>;
var i : u32;
var<in> i : u32;
fn f() -> void {
var c : f32 = a[ b[i] ];
@@ -62,11 +62,11 @@ fn f() -> void {
)";
auto* expect = R"(
var a : array<f32, 3>;
var<in> a : array<f32, 3>;
var b : array<f32, 5>;
var<in> b : array<f32, 5>;
var i : u32;
var<in> i : u32;
fn f() -> void {
var c : f32 = a[min(u32(b[min(u32(i), 4u)]), 2u)];
@@ -80,7 +80,7 @@ fn f() -> void {
TEST_F(BoundArrayAccessorsTest, Array_Idx_Scalar) {
auto* src = R"(
var a : array<f32, 3>;
var<in> a : array<f32, 3>;
fn f() -> void {
var b : f32 = a[1];
@@ -88,7 +88,7 @@ fn f() -> void {
)";
auto* expect = R"(
var a : array<f32, 3>;
var<in> a : array<f32, 3>;
fn f() -> void {
var b : f32 = a[1];
@@ -102,9 +102,9 @@ fn f() -> void {
TEST_F(BoundArrayAccessorsTest, Array_Idx_Expr) {
auto* src = R"(
var a : array<f32, 3>;
var<in> a : array<f32, 3>;
var c : i32;
var<in> c : i32;
fn f() -> void {
var b : f32 = a[c + 2 - 3];
@@ -112,9 +112,9 @@ fn f() -> void {
)";
auto* expect = R"(
var a : array<f32, 3>;
var<in> a : array<f32, 3>;
var c : i32;
var<in> c : i32;
fn f() -> void {
var b : f32 = a[min(u32(((c + 2) - 3)), 2u)];
@@ -128,7 +128,7 @@ fn f() -> void {
TEST_F(BoundArrayAccessorsTest, Array_Idx_Negative) {
auto* src = R"(
var a : array<f32, 3>;
var<in> a : array<f32, 3>;
fn f() -> void {
var b : f32 = a[-1];
@@ -136,7 +136,7 @@ fn f() -> void {
)";
auto* expect = R"(
var a : array<f32, 3>;
var<in> a : array<f32, 3>;
fn f() -> void {
var b : f32 = a[0];
@@ -150,7 +150,7 @@ fn f() -> void {
TEST_F(BoundArrayAccessorsTest, Array_Idx_OutOfBounds) {
auto* src = R"(
var a : array<f32, 3>;
var<in> a : array<f32, 3>;
fn f() -> void {
var b : f32 = a[3];
@@ -158,7 +158,7 @@ fn f() -> void {
)";
auto* expect = R"(
var a : array<f32, 3>;
var<in> a : array<f32, 3>;
fn f() -> void {
var b : f32 = a[2];
@@ -172,7 +172,7 @@ fn f() -> void {
TEST_F(BoundArrayAccessorsTest, Vector_Idx_Scalar) {
auto* src = R"(
var a : vec3<f32>;
var<in> a : vec3<f32>;
fn f() -> void {
var b : f32 = a[1];
@@ -180,7 +180,7 @@ fn f() -> void {
)";
auto* expect = R"(
var a : vec3<f32>;
var<in> a : vec3<f32>;
fn f() -> void {
var b : f32 = a[1];
@@ -194,9 +194,9 @@ fn f() -> void {
TEST_F(BoundArrayAccessorsTest, Vector_Idx_Expr) {
auto* src = R"(
var a : vec3<f32>;
var<in> a : vec3<f32>;
var c : i32;
var<in> c : i32;
fn f() -> void {
var b : f32 = a[c + 2 - 3];
@@ -204,9 +204,9 @@ fn f() -> void {
)";
auto* expect = R"(
var a : vec3<f32>;
var<in> a : vec3<f32>;
var c : i32;
var<in> c : i32;
fn f() -> void {
var b : f32 = a[min(u32(((c + 2) - 3)), 2u)];
@@ -220,7 +220,7 @@ fn f() -> void {
TEST_F(BoundArrayAccessorsTest, Vector_Swizzle_Idx_Scalar) {
auto* src = R"(
var a : vec3<f32>;
var<in> a : vec3<f32>;
fn f() -> void {
var b : f32 = a.xy[2];
@@ -228,7 +228,7 @@ fn f() -> void {
)";
auto* expect = R"(
var a : vec3<f32>;
var<in> a : vec3<f32>;
fn f() -> void {
var b : f32 = a.xy[1];
@@ -242,9 +242,9 @@ fn f() -> void {
TEST_F(BoundArrayAccessorsTest, Vector_Swizzle_Idx_Var) {
auto* src = R"(
var a : vec3<f32>;
var<in> a : vec3<f32>;
var c : i32;
var<in> c : i32;
fn f() -> void {
var b : f32 = a.xy[c];
@@ -252,9 +252,9 @@ fn f() -> void {
)";
auto* expect = R"(
var a : vec3<f32>;
var<in> a : vec3<f32>;
var c : i32;
var<in> c : i32;
fn f() -> void {
var b : f32 = a.xy[min(u32(c), 1u)];
@@ -267,9 +267,9 @@ fn f() -> void {
}
TEST_F(BoundArrayAccessorsTest, Vector_Swizzle_Idx_Expr) {
auto* src = R"(
var a : vec3<f32>;
var<in> a : vec3<f32>;
var c : i32;
var<in> c : i32;
fn f() -> void {
var b : f32 = a.xy[c + 2 - 3];
@@ -277,9 +277,9 @@ fn f() -> void {
)";
auto* expect = R"(
var a : vec3<f32>;
var<in> a : vec3<f32>;
var c : i32;
var<in> c : i32;
fn f() -> void {
var b : f32 = a.xy[min(u32(((c + 2) - 3)), 1u)];
@@ -293,7 +293,7 @@ fn f() -> void {
TEST_F(BoundArrayAccessorsTest, Vector_Idx_Negative) {
auto* src = R"(
var a : vec3<f32>;
var<in> a : vec3<f32>;
fn f() -> void {
var b : f32 = a[-1];
@@ -301,7 +301,7 @@ fn f() -> void {
)";
auto* expect = R"(
var a : vec3<f32>;
var<in> a : vec3<f32>;
fn f() -> void {
var b : f32 = a[0];
@@ -315,7 +315,7 @@ fn f() -> void {
TEST_F(BoundArrayAccessorsTest, Vector_Idx_OutOfBounds) {
auto* src = R"(
var a : vec3<f32>;
var<in> a : vec3<f32>;
fn f() -> void {
var b : f32 = a[3];
@@ -323,7 +323,7 @@ fn f() -> void {
)";
auto* expect = R"(
var a : vec3<f32>;
var<in> a : vec3<f32>;
fn f() -> void {
var b : f32 = a[2];
@@ -337,7 +337,7 @@ fn f() -> void {
TEST_F(BoundArrayAccessorsTest, Matrix_Idx_Scalar) {
auto* src = R"(
var a : mat3x2<f32>;
var<in> a : mat3x2<f32>;
fn f() -> void {
var b : f32 = a[2][1];
@@ -345,7 +345,7 @@ fn f() -> void {
)";
auto* expect = R"(
var a : mat3x2<f32>;
var<in> a : mat3x2<f32>;
fn f() -> void {
var b : f32 = a[2][1];
@@ -359,9 +359,9 @@ fn f() -> void {
TEST_F(BoundArrayAccessorsTest, Matrix_Idx_Expr_Column) {
auto* src = R"(
var a : mat3x2<f32>;
var<in> a : mat3x2<f32>;
var c : i32;
var<in> c : i32;
fn f() -> void {
var b : f32 = a[c + 2 - 3][1];
@@ -369,9 +369,9 @@ fn f() -> void {
)";
auto* expect = R"(
var a : mat3x2<f32>;
var<in> a : mat3x2<f32>;
var c : i32;
var<in> c : i32;
fn f() -> void {
var b : f32 = a[min(u32(((c + 2) - 3)), 2u)][1];
@@ -385,9 +385,9 @@ fn f() -> void {
TEST_F(BoundArrayAccessorsTest, Matrix_Idx_Expr_Row) {
auto* src = R"(
var a : mat3x2<f32>;
var<in> a : mat3x2<f32>;
var c : i32;
var<in> c : i32;
fn f() -> void {
var b : f32 = a[1][c + 2 - 3];
@@ -395,9 +395,9 @@ fn f() -> void {
)";
auto* expect = R"(
var a : mat3x2<f32>;
var<in> a : mat3x2<f32>;
var c : i32;
var<in> c : i32;
fn f() -> void {
var b : f32 = a[1][min(u32(((c + 2) - 3)), 1u)];
@@ -411,7 +411,7 @@ fn f() -> void {
TEST_F(BoundArrayAccessorsTest, Matrix_Idx_Negative_Column) {
auto* src = R"(
var a : mat3x2<f32>;
var<in> a : mat3x2<f32>;
fn f() -> void {
var b : f32 = a[-1][1];
@@ -419,7 +419,7 @@ fn f() -> void {
)";
auto* expect = R"(
var a : mat3x2<f32>;
var<in> a : mat3x2<f32>;
fn f() -> void {
var b : f32 = a[0][1];
@@ -433,7 +433,7 @@ fn f() -> void {
TEST_F(BoundArrayAccessorsTest, Matrix_Idx_Negative_Row) {
auto* src = R"(
var a : mat3x2<f32>;
var<in> a : mat3x2<f32>;
fn f() -> void {
var b : f32 = a[2][-1];
@@ -441,7 +441,7 @@ fn f() -> void {
)";
auto* expect = R"(
var a : mat3x2<f32>;
var<in> a : mat3x2<f32>;
fn f() -> void {
var b : f32 = a[2][0];
@@ -455,7 +455,7 @@ fn f() -> void {
TEST_F(BoundArrayAccessorsTest, Matrix_Idx_OutOfBounds_Column) {
auto* src = R"(
var a : mat3x2<f32>;
var<in> a : mat3x2<f32>;
fn f() -> void {
var b : f32 = a[5][1];
@@ -463,7 +463,7 @@ fn f() -> void {
)";
auto* expect = R"(
var a : mat3x2<f32>;
var<in> a : mat3x2<f32>;
fn f() -> void {
var b : f32 = a[2][1];
@@ -477,7 +477,7 @@ fn f() -> void {
TEST_F(BoundArrayAccessorsTest, Matrix_Idx_OutOfBounds_Row) {
auto* src = R"(
var a : mat3x2<f32>;
var<in> a : mat3x2<f32>;
fn f() -> void {
var b : f32 = a[2][5];
@@ -485,7 +485,7 @@ fn f() -> void {
)";
auto* expect = R"(
var a : mat3x2<f32>;
var<in> a : mat3x2<f32>;
fn f() -> void {
var b : f32 = a[2][1];
@@ -540,7 +540,7 @@ struct S {
a : f32;
b : array<f32>;
};
var s : S;
var<in> s : S;
fn f() -> void {
var d : f32 = s.b[25];
@@ -554,7 +554,7 @@ struct S {
b : array<f32>;
};
var s : S;
var<in> s : S;
fn f() -> void {
var d : f32 = s.b[min(u32(25), (arrayLength(s.b) - 1u))];