mirror of
https://github.com/encounter/dawn-cmake.git
synced 2025-12-10 22:17:51 +00:00
[wgsl-writer] Emit globals in declared order
Instead of emitting all global variables and then functions, emit global declarations in the order they were added to the AST. This fixes issues where the reording might generate an invalid WGSL program from a valid input (e.g. when declaring a global variable with the same name as a variable inside a function that precedes it). This also unifies the implementation of Generate() and GenerateEntryPoint(), to avoid implementing the same logic twice. Change-Id: I60a4e5ed4a054562cdcc3d028f8d577434a6d713 Reviewed-on: https://dawn-review.googlesource.com/c/tint/+/41303 Reviewed-by: dan sinclair <dsinclair@chromium.org> Commit-Queue: dan sinclair <dsinclair@chromium.org>
This commit is contained in:
committed by
Commit Bot service account
parent
0c7f97626f
commit
dfd1714174
@@ -25,6 +25,7 @@ using BoundArrayAccessorsTest = TransformTest;
|
||||
TEST_F(BoundArrayAccessorsTest, Ptrs_Clamp) {
|
||||
auto* src = R"(
|
||||
var a : array<f32, 3>;
|
||||
|
||||
const c : u32 = 1u;
|
||||
|
||||
fn f() -> void {
|
||||
@@ -34,6 +35,7 @@ fn f() -> void {
|
||||
|
||||
auto* expect = R"(
|
||||
var a : array<f32, 3>;
|
||||
|
||||
const c : u32 = 1u;
|
||||
|
||||
fn f() -> void {
|
||||
@@ -49,7 +51,9 @@ fn f() -> void {
|
||||
TEST_F(BoundArrayAccessorsTest, Array_Idx_Nested_Scalar) {
|
||||
auto* src = R"(
|
||||
var a : array<f32, 3>;
|
||||
|
||||
var b : array<f32, 5>;
|
||||
|
||||
var i : u32;
|
||||
|
||||
fn f() -> void {
|
||||
@@ -59,7 +63,9 @@ fn f() -> void {
|
||||
|
||||
auto* expect = R"(
|
||||
var a : array<f32, 3>;
|
||||
|
||||
var b : array<f32, 5>;
|
||||
|
||||
var i : u32;
|
||||
|
||||
fn f() -> void {
|
||||
@@ -97,6 +103,7 @@ fn f() -> void {
|
||||
TEST_F(BoundArrayAccessorsTest, Array_Idx_Expr) {
|
||||
auto* src = R"(
|
||||
var a : array<f32, 3>;
|
||||
|
||||
var c : u32;
|
||||
|
||||
fn f() -> void {
|
||||
@@ -106,6 +113,7 @@ fn f() -> void {
|
||||
|
||||
auto* expect = R"(
|
||||
var a : array<f32, 3>;
|
||||
|
||||
var c : u32;
|
||||
|
||||
fn f() -> void {
|
||||
@@ -187,6 +195,7 @@ fn f() -> void {
|
||||
TEST_F(BoundArrayAccessorsTest, Vector_Idx_Expr) {
|
||||
auto* src = R"(
|
||||
var a : vec3<f32>;
|
||||
|
||||
var c : u32;
|
||||
|
||||
fn f() -> void {
|
||||
@@ -196,6 +205,7 @@ fn f() -> void {
|
||||
|
||||
auto* expect = R"(
|
||||
var a : vec3<f32>;
|
||||
|
||||
var c : u32;
|
||||
|
||||
fn f() -> void {
|
||||
@@ -277,6 +287,7 @@ fn f() -> void {
|
||||
TEST_F(BoundArrayAccessorsTest, Matrix_Idx_Expr_Column) {
|
||||
auto* src = R"(
|
||||
var a : mat3x2<f32>;
|
||||
|
||||
var c : u32;
|
||||
|
||||
fn f() -> void {
|
||||
@@ -286,6 +297,7 @@ fn f() -> void {
|
||||
|
||||
auto* expect = R"(
|
||||
var a : mat3x2<f32>;
|
||||
|
||||
var c : u32;
|
||||
|
||||
fn f() -> void {
|
||||
@@ -301,6 +313,7 @@ fn f() -> void {
|
||||
TEST_F(BoundArrayAccessorsTest, Matrix_Idx_Expr_Row) {
|
||||
auto* src = R"(
|
||||
var a : mat3x2<f32>;
|
||||
|
||||
var c : u32;
|
||||
|
||||
fn f() -> void {
|
||||
@@ -310,6 +323,7 @@ fn f() -> void {
|
||||
|
||||
auto* expect = R"(
|
||||
var a : mat3x2<f32>;
|
||||
|
||||
var c : u32;
|
||||
|
||||
fn f() -> void {
|
||||
|
||||
@@ -76,15 +76,16 @@ fn entry() -> void {
|
||||
)";
|
||||
|
||||
auto* expect = R"(
|
||||
[[builtin(vertex_index)]] var<in> tint_first_index_offset_vert_idx : u32;
|
||||
|
||||
[[binding(1), group(2)]] var<uniform> tint_first_index_data : TintFirstIndexOffsetData;
|
||||
|
||||
[[block]]
|
||||
struct TintFirstIndexOffsetData {
|
||||
[[offset(0)]]
|
||||
tint_first_vertex_index : u32;
|
||||
};
|
||||
|
||||
[[builtin(vertex_index)]] var<in> tint_first_index_offset_vert_idx : u32;
|
||||
[[binding(1), group(2)]] var<uniform> tint_first_index_data : TintFirstIndexOffsetData;
|
||||
|
||||
fn test() -> u32 {
|
||||
const vert_idx : u32 = (tint_first_index_offset_vert_idx + tint_first_index_data.tint_first_vertex_index);
|
||||
return vert_idx;
|
||||
@@ -116,15 +117,16 @@ fn entry() -> void {
|
||||
)";
|
||||
|
||||
auto* expect = R"(
|
||||
[[builtin(instance_index)]] var<in> tint_first_index_offset_inst_idx : u32;
|
||||
|
||||
[[binding(1), group(7)]] var<uniform> tint_first_index_data : TintFirstIndexOffsetData;
|
||||
|
||||
[[block]]
|
||||
struct TintFirstIndexOffsetData {
|
||||
[[offset(0)]]
|
||||
tint_first_instance_index : u32;
|
||||
};
|
||||
|
||||
[[builtin(instance_index)]] var<in> tint_first_index_offset_inst_idx : u32;
|
||||
[[binding(1), group(7)]] var<uniform> tint_first_index_data : TintFirstIndexOffsetData;
|
||||
|
||||
fn test() -> u32 {
|
||||
const inst_idx : u32 = (tint_first_index_offset_inst_idx + tint_first_index_data.tint_first_instance_index);
|
||||
return inst_idx;
|
||||
@@ -157,6 +159,12 @@ fn entry() -> void {
|
||||
)";
|
||||
|
||||
auto* expect = R"(
|
||||
[[builtin(instance_index)]] var<in> tint_first_index_offset_instance_idx : u32;
|
||||
|
||||
[[builtin(vertex_index)]] var<in> tint_first_index_offset_vert_idx : u32;
|
||||
|
||||
[[binding(1), group(2)]] var<uniform> tint_first_index_data : TintFirstIndexOffsetData;
|
||||
|
||||
[[block]]
|
||||
struct TintFirstIndexOffsetData {
|
||||
[[offset(0)]]
|
||||
@@ -165,10 +173,6 @@ struct TintFirstIndexOffsetData {
|
||||
tint_first_instance_index : u32;
|
||||
};
|
||||
|
||||
[[builtin(instance_index)]] var<in> tint_first_index_offset_instance_idx : u32;
|
||||
[[builtin(vertex_index)]] var<in> tint_first_index_offset_vert_idx : u32;
|
||||
[[binding(1), group(2)]] var<uniform> tint_first_index_data : TintFirstIndexOffsetData;
|
||||
|
||||
fn test() -> u32 {
|
||||
const instance_idx : u32 = (tint_first_index_offset_instance_idx + tint_first_index_data.tint_first_instance_index);
|
||||
const vert_idx : u32 = (tint_first_index_offset_vert_idx + tint_first_index_data.tint_first_vertex_index);
|
||||
@@ -205,15 +209,16 @@ fn entry() -> void {
|
||||
)";
|
||||
|
||||
auto* expect = R"(
|
||||
[[builtin(vertex_index)]] var<in> tint_first_index_offset_vert_idx : u32;
|
||||
|
||||
[[binding(1), group(2)]] var<uniform> tint_first_index_data : TintFirstIndexOffsetData;
|
||||
|
||||
[[block]]
|
||||
struct TintFirstIndexOffsetData {
|
||||
[[offset(0)]]
|
||||
tint_first_vertex_index : u32;
|
||||
};
|
||||
|
||||
[[builtin(vertex_index)]] var<in> tint_first_index_offset_vert_idx : u32;
|
||||
[[binding(1), group(2)]] var<uniform> tint_first_index_data : TintFirstIndexOffsetData;
|
||||
|
||||
fn func1() -> u32 {
|
||||
const vert_idx : u32 = (tint_first_index_offset_vert_idx + tint_first_index_data.tint_first_vertex_index);
|
||||
return vert_idx;
|
||||
|
||||
@@ -127,14 +127,16 @@ fn main() -> void {}
|
||||
)";
|
||||
|
||||
auto* expect = R"(
|
||||
[[builtin(vertex_index)]] var<in> _tint_pulling_vertex_index : i32;
|
||||
|
||||
[[binding(0), group(4)]] var<storage> _tint_pulling_vertex_buffer_0 : TintVertexData;
|
||||
|
||||
[[block]]
|
||||
struct TintVertexData {
|
||||
[[offset(0)]]
|
||||
_tint_vertex_data : [[stride(4)]] array<u32>;
|
||||
};
|
||||
|
||||
[[builtin(vertex_index)]] var<in> _tint_pulling_vertex_index : i32;
|
||||
[[binding(0), group(4)]] var<storage> _tint_pulling_vertex_buffer_0 : TintVertexData;
|
||||
var<private> var_a : f32;
|
||||
|
||||
[[stage(vertex)]]
|
||||
@@ -166,14 +168,16 @@ fn main() -> void {}
|
||||
)";
|
||||
|
||||
auto* expect = R"(
|
||||
[[builtin(instance_index)]] var<in> _tint_pulling_instance_index : i32;
|
||||
|
||||
[[binding(0), group(4)]] var<storage> _tint_pulling_vertex_buffer_0 : TintVertexData;
|
||||
|
||||
[[block]]
|
||||
struct TintVertexData {
|
||||
[[offset(0)]]
|
||||
_tint_vertex_data : [[stride(4)]] array<u32>;
|
||||
};
|
||||
|
||||
[[builtin(instance_index)]] var<in> _tint_pulling_instance_index : i32;
|
||||
[[binding(0), group(4)]] var<storage> _tint_pulling_vertex_buffer_0 : TintVertexData;
|
||||
var<private> var_a : f32;
|
||||
|
||||
[[stage(vertex)]]
|
||||
@@ -205,14 +209,16 @@ fn main() -> void {}
|
||||
)";
|
||||
|
||||
auto* expect = R"(
|
||||
[[builtin(vertex_index)]] var<in> _tint_pulling_vertex_index : i32;
|
||||
|
||||
[[binding(0), group(5)]] var<storage> _tint_pulling_vertex_buffer_0 : TintVertexData;
|
||||
|
||||
[[block]]
|
||||
struct TintVertexData {
|
||||
[[offset(0)]]
|
||||
_tint_vertex_data : [[stride(4)]] array<u32>;
|
||||
};
|
||||
|
||||
[[builtin(vertex_index)]] var<in> _tint_pulling_vertex_index : i32;
|
||||
[[binding(0), group(5)]] var<storage> _tint_pulling_vertex_buffer_0 : TintVertexData;
|
||||
var<private> var_a : f32;
|
||||
|
||||
[[stage(vertex)]]
|
||||
@@ -249,17 +255,22 @@ fn main() -> void {}
|
||||
)";
|
||||
|
||||
auto* expect = R"(
|
||||
[[binding(0), group(4)]] var<storage> _tint_pulling_vertex_buffer_0 : TintVertexData;
|
||||
|
||||
[[binding(1), group(4)]] var<storage> _tint_pulling_vertex_buffer_1 : TintVertexData;
|
||||
|
||||
[[block]]
|
||||
struct TintVertexData {
|
||||
[[offset(0)]]
|
||||
_tint_vertex_data : [[stride(4)]] array<u32>;
|
||||
};
|
||||
|
||||
[[binding(0), group(4)]] var<storage> _tint_pulling_vertex_buffer_0 : TintVertexData;
|
||||
[[binding(1), group(4)]] var<storage> _tint_pulling_vertex_buffer_1 : TintVertexData;
|
||||
var<private> var_a : f32;
|
||||
|
||||
var<private> var_b : f32;
|
||||
|
||||
[[builtin(vertex_index)]] var<in> custom_vertex_index : i32;
|
||||
|
||||
[[builtin(instance_index)]] var<in> custom_instance_index : i32;
|
||||
|
||||
[[stage(vertex)]]
|
||||
@@ -295,15 +306,18 @@ fn main() -> void {}
|
||||
)";
|
||||
|
||||
auto* expect = R"(
|
||||
[[builtin(vertex_index)]] var<in> _tint_pulling_vertex_index : i32;
|
||||
|
||||
[[binding(0), group(4)]] var<storage> _tint_pulling_vertex_buffer_0 : TintVertexData;
|
||||
|
||||
[[block]]
|
||||
struct TintVertexData {
|
||||
[[offset(0)]]
|
||||
_tint_vertex_data : [[stride(4)]] array<u32>;
|
||||
};
|
||||
|
||||
[[builtin(vertex_index)]] var<in> _tint_pulling_vertex_index : i32;
|
||||
[[binding(0), group(4)]] var<storage> _tint_pulling_vertex_buffer_0 : TintVertexData;
|
||||
var<private> var_a : f32;
|
||||
|
||||
var<private> var_b : array<f32, 4>;
|
||||
|
||||
[[stage(vertex)]]
|
||||
@@ -341,18 +355,24 @@ fn main() -> void {}
|
||||
)";
|
||||
|
||||
auto* expect = R"(
|
||||
[[builtin(vertex_index)]] var<in> _tint_pulling_vertex_index : i32;
|
||||
|
||||
[[binding(0), group(4)]] var<storage> _tint_pulling_vertex_buffer_0 : TintVertexData;
|
||||
|
||||
[[binding(1), group(4)]] var<storage> _tint_pulling_vertex_buffer_1 : TintVertexData;
|
||||
|
||||
[[binding(2), group(4)]] var<storage> _tint_pulling_vertex_buffer_2 : TintVertexData;
|
||||
|
||||
[[block]]
|
||||
struct TintVertexData {
|
||||
[[offset(0)]]
|
||||
_tint_vertex_data : [[stride(4)]] array<u32>;
|
||||
};
|
||||
|
||||
[[builtin(vertex_index)]] var<in> _tint_pulling_vertex_index : i32;
|
||||
[[binding(0), group(4)]] var<storage> _tint_pulling_vertex_buffer_0 : TintVertexData;
|
||||
[[binding(1), group(4)]] var<storage> _tint_pulling_vertex_buffer_1 : TintVertexData;
|
||||
[[binding(2), group(4)]] var<storage> _tint_pulling_vertex_buffer_2 : TintVertexData;
|
||||
var<private> var_a : array<f32, 2>;
|
||||
|
||||
var<private> var_b : array<f32, 3>;
|
||||
|
||||
var<private> var_c : array<f32, 4>;
|
||||
|
||||
[[stage(vertex)]]
|
||||
|
||||
Reference in New Issue
Block a user