GLSL: fix arrayLength(). Bug: tint:1222 Change-Id: I6f9576908a41f3b37036ef7afe10cb74a99cd63f Reviewed-on: https://dawn-review.googlesource.com/c/tint/+/79440 Reviewed-by: Ben Clayton <bclayton@google.com> Reviewed-by: David Neto <dneto@google.com> Kokoro: Kokoro <noreply+kokoro@google.com> Commit-Queue: Stephen White <senorblanco@chromium.org>
diff --git a/src/transform/glsl.cc b/src/transform/glsl.cc index 5c24e3a..29b10d4 100644 --- a/src/transform/glsl.cc +++ b/src/transform/glsl.cc
@@ -20,7 +20,6 @@ #include "src/transform/add_empty_entry_point.h" #include "src/transform/add_spirv_block_attribute.h" #include "src/transform/binding_remapper.h" -#include "src/transform/calculate_array_length.h" #include "src/transform/canonicalize_entry_point_io.h" #include "src/transform/combine_samplers.h" #include "src/transform/decompose_memory_access.h" @@ -86,7 +85,6 @@ BindingRemapper::AccessControls ac; data.Add<BindingRemapper::Remappings>(bp, ac, /* mayCollide */ true); } - manager.Add<CalculateArrayLength>(); manager.Add<ExternalTextureTransform>(); data.Add<PromoteSideEffectsToDecl::Config>(
diff --git a/src/writer/glsl/generator_impl.cc b/src/writer/glsl/generator_impl.cc index c982ffe..3215086 100644 --- a/src/writer/glsl/generator_impl.cc +++ b/src/writer/glsl/generator_impl.cc
@@ -44,7 +44,6 @@ #include "src/sem/type_constructor.h" #include "src/sem/type_conversion.h" #include "src/sem/variable.h" -#include "src/transform/calculate_array_length.h" #include "src/transform/glsl.h" #include "src/utils/defer.h" #include "src/utils/map.h" @@ -467,8 +466,8 @@ auto* call = builder_.Sem().Get(expr); auto* target = call->Target(); - if (auto* func = target->As<sem::Function>()) { - return EmitFunctionCall(out, call, func); + if (target->Is<sem::Function>()) { + return EmitFunctionCall(out, call); } if (auto* builtin = target->As<sem::Builtin>()) { return EmitBuiltinCall(out, call, builtin); @@ -484,9 +483,7 @@ return false; } -bool GeneratorImpl::EmitFunctionCall(std::ostream& out, - const sem::Call* call, - const sem::Function* func) { +bool GeneratorImpl::EmitFunctionCall(std::ostream& out, const sem::Call* call) { const auto& args = call->Arguments(); auto* decl = call->Declaration(); auto* ident = decl->target.name; @@ -494,21 +491,6 @@ auto name = builder_.Symbols().NameFor(ident->symbol); auto caller_sym = ident->symbol; - if (ast::HasAttribute<transform::CalculateArrayLength::BufferSizeIntrinsic>( - func->Declaration()->attributes)) { - // Special function generated by the CalculateArrayLength transform for - // calling X.GetDimensions(Y) - if (!EmitExpression(out, args[0]->Declaration())) { - return false; - } - out << ".GetDimensions("; - if (!EmitExpression(out, args[1]->Declaration())) { - return false; - } - out << ")"; - return true; - } - out << name << "("; bool first = true; @@ -555,6 +537,9 @@ if (builtin->Type() == sem::BuiltinType::kRadians) { return EmitRadiansCall(out, expr, builtin); } + if (builtin->Type() == sem::BuiltinType::kArrayLength) { + return EmitArrayLength(out, expr); + } if (builtin->IsDataPacking()) { return EmitDataPackingCall(out, expr, builtin); } @@ -754,6 +739,16 @@ return false; } +bool GeneratorImpl::EmitArrayLength(std::ostream& out, + const ast::CallExpression* expr) { + out << "uint("; + if (!EmitExpression(out, expr->args[0])) { + return false; + } + out << ".length())"; + return true; +} + bool GeneratorImpl::EmitSelectCall(std::ostream& out, const ast::CallExpression* expr) { auto* expr_false = expr->args[0];
diff --git a/src/writer/glsl/generator_impl.h b/src/writer/glsl/generator_impl.h index 92667d1..3f71501 100644 --- a/src/writer/glsl/generator_impl.h +++ b/src/writer/glsl/generator_impl.h
@@ -111,11 +111,8 @@ /// Handles generating a function call expression /// @param out the output of the expression stream /// @param call the call expression - /// @param function the function being called /// @returns true if the expression is emitted - bool EmitFunctionCall(std::ostream& out, - const sem::Call* call, - const sem::Function* function); + bool EmitFunctionCall(std::ostream& out, const sem::Call* call); /// Handles generating a builtin call expression /// @param out the output of the expression stream /// @param call the call expression @@ -162,6 +159,11 @@ bool EmitWorkgroupAtomicCall(std::ostream& out, const ast::CallExpression* expr, const sem::Builtin* builtin); + /// Handles generating an array.length() call + /// @param out the output of the expression stream + /// @param expr the call expression + /// @returns true if the array length expression is emitted + bool EmitArrayLength(std::ostream& out, const ast::CallExpression* expr); /// Handles generating a call to a texture function (`textureSample`, /// `textureSampleGrad`, etc) /// @param out the output of the expression stream
diff --git a/src/writer/glsl/generator_impl_sanitizer_test.cc b/src/writer/glsl/generator_impl_sanitizer_test.cc index 2b663d1..0329bc0 100644 --- a/src/writer/glsl/generator_impl_sanitizer_test.cc +++ b/src/writer/glsl/generator_impl_sanitizer_test.cc
@@ -55,10 +55,7 @@ float a[]; } b; void a_func() { - uint tint_symbol_1 = 0u; - b.GetDimensions(tint_symbol_1); - uint tint_symbol_2 = ((tint_symbol_1 - 0u) / 4u); - uint len = tint_symbol_2; + uint len = uint(b.a.length()); } void main() { @@ -104,10 +101,7 @@ float a[]; } b; void a_func() { - uint tint_symbol_1 = 0u; - b.GetDimensions(tint_symbol_1); - uint tint_symbol_2 = ((tint_symbol_1 - 4u) / 4u); - uint len = tint_symbol_2; + uint len = uint(b.a.length()); } void main() { @@ -154,10 +148,7 @@ float a[]; } b; void a_func() { - uint tint_symbol_1 = 0u; - b.GetDimensions(tint_symbol_1); - uint tint_symbol_2 = ((tint_symbol_1 - 0u) / 4u); - uint len = tint_symbol_2; + uint len = uint(b.a.length()); } void main() {
diff --git a/test/bug/chromium/1290107.wgsl.expected.glsl b/test/bug/chromium/1290107.wgsl.expected.glsl index a68fe94..c60fe6c 100644 --- a/test/bug/chromium/1290107.wgsl.expected.glsl +++ b/test/bug/chromium/1290107.wgsl.expected.glsl
@@ -1,5 +1,3 @@ -SKIP: FAILED - #version 310 es precision mediump float; @@ -11,10 +9,7 @@ S inner[]; } arr; void tint_symbol() { - uint tint_symbol_2 = 0u; - arr.inner.GetDimensions(tint_symbol_2); - uint tint_symbol_3 = (tint_symbol_2 / 4u); - uint len = tint_symbol_3; + uint len = uint(arr.inner.length()); } layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in; @@ -22,10 +17,3 @@ tint_symbol(); return; } -Error parsing GLSL shader: -ERROR: 0:13: '.' : cannot apply to an array: GetDimensions -ERROR: 0:13: '' : compilation terminated -ERROR: 2 compilation errors. No code generated. - - -
diff --git a/test/builtins/arrayLength/complex_via_let.wgsl.expected.glsl b/test/builtins/arrayLength/complex_via_let.wgsl.expected.glsl index 6f43d16..e2d85d0 100644 --- a/test/builtins/arrayLength/complex_via_let.wgsl.expected.glsl +++ b/test/builtins/arrayLength/complex_via_let.wgsl.expected.glsl
@@ -1,5 +1,3 @@ -SKIP: FAILED - #version 310 es precision mediump float; @@ -7,10 +5,7 @@ int a[]; } G; void tint_symbol() { - uint tint_symbol_2 = 0u; - G.GetDimensions(tint_symbol_2); - uint tint_symbol_3 = ((tint_symbol_2 - 0u) / 4u); - uint l1 = tint_symbol_3; + uint l1 = uint(G.a.length()); } layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in; @@ -18,10 +13,3 @@ tint_symbol(); return; } -Error parsing GLSL shader: -ERROR: 0:9: 'GetDimensions' : no such field in structure -ERROR: 0:9: '' : compilation terminated -ERROR: 2 compilation errors. No code generated. - - -
diff --git a/test/builtins/arrayLength/complex_via_let_no_struct.wgsl.expected.glsl b/test/builtins/arrayLength/complex_via_let_no_struct.wgsl.expected.glsl index 2df0269..f962064 100644 --- a/test/builtins/arrayLength/complex_via_let_no_struct.wgsl.expected.glsl +++ b/test/builtins/arrayLength/complex_via_let_no_struct.wgsl.expected.glsl
@@ -1,5 +1,3 @@ -SKIP: FAILED - #version 310 es precision mediump float; @@ -7,10 +5,7 @@ int inner[]; } G; void tint_symbol() { - uint tint_symbol_2 = 0u; - G.inner.GetDimensions(tint_symbol_2); - uint tint_symbol_3 = (tint_symbol_2 / 4u); - uint l1 = tint_symbol_3; + uint l1 = uint(G.inner.length()); } layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in; @@ -18,10 +13,3 @@ tint_symbol(); return; } -Error parsing GLSL shader: -ERROR: 0:9: '.' : cannot apply to an array: GetDimensions -ERROR: 0:9: '' : compilation terminated -ERROR: 2 compilation errors. No code generated. - - -
diff --git a/test/builtins/arrayLength/deprecated.wgsl.expected.glsl b/test/builtins/arrayLength/deprecated.wgsl.expected.glsl index d447f38..c45f59b 100644 --- a/test/builtins/arrayLength/deprecated.wgsl.expected.glsl +++ b/test/builtins/arrayLength/deprecated.wgsl.expected.glsl
@@ -1,5 +1,3 @@ -SKIP: FAILED - #version 310 es precision mediump float; @@ -7,11 +5,8 @@ int a[]; } G; void tint_symbol() { - uint tint_symbol_2 = 0u; - G.GetDimensions(tint_symbol_2); - uint tint_symbol_3 = ((tint_symbol_2 - 0u) / 4u); - uint l1 = tint_symbol_3; - uint l2 = tint_symbol_3; + uint l1 = uint(G.a.length()); + uint l2 = uint(G.a.length()); } layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in; @@ -19,10 +14,3 @@ tint_symbol(); return; } -Error parsing GLSL shader: -ERROR: 0:9: 'GetDimensions' : no such field in structure -ERROR: 0:9: '' : compilation terminated -ERROR: 2 compilation errors. No code generated. - - -
diff --git a/test/builtins/arrayLength/simple.wgsl.expected.glsl b/test/builtins/arrayLength/simple.wgsl.expected.glsl index 6f43d16..e2d85d0 100644 --- a/test/builtins/arrayLength/simple.wgsl.expected.glsl +++ b/test/builtins/arrayLength/simple.wgsl.expected.glsl
@@ -1,5 +1,3 @@ -SKIP: FAILED - #version 310 es precision mediump float; @@ -7,10 +5,7 @@ int a[]; } G; void tint_symbol() { - uint tint_symbol_2 = 0u; - G.GetDimensions(tint_symbol_2); - uint tint_symbol_3 = ((tint_symbol_2 - 0u) / 4u); - uint l1 = tint_symbol_3; + uint l1 = uint(G.a.length()); } layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in; @@ -18,10 +13,3 @@ tint_symbol(); return; } -Error parsing GLSL shader: -ERROR: 0:9: 'GetDimensions' : no such field in structure -ERROR: 0:9: '' : compilation terminated -ERROR: 2 compilation errors. No code generated. - - -
diff --git a/test/builtins/arrayLength/simple_no_struct.wgsl.expected.glsl b/test/builtins/arrayLength/simple_no_struct.wgsl.expected.glsl index 2df0269..f962064 100644 --- a/test/builtins/arrayLength/simple_no_struct.wgsl.expected.glsl +++ b/test/builtins/arrayLength/simple_no_struct.wgsl.expected.glsl
@@ -1,5 +1,3 @@ -SKIP: FAILED - #version 310 es precision mediump float; @@ -7,10 +5,7 @@ int inner[]; } G; void tint_symbol() { - uint tint_symbol_2 = 0u; - G.inner.GetDimensions(tint_symbol_2); - uint tint_symbol_3 = (tint_symbol_2 / 4u); - uint l1 = tint_symbol_3; + uint l1 = uint(G.inner.length()); } layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in; @@ -18,10 +13,3 @@ tint_symbol(); return; } -Error parsing GLSL shader: -ERROR: 0:9: '.' : cannot apply to an array: GetDimensions -ERROR: 0:9: '' : compilation terminated -ERROR: 2 compilation errors. No code generated. - - -
diff --git a/test/builtins/arrayLength/via_let.wgsl.expected.glsl b/test/builtins/arrayLength/via_let.wgsl.expected.glsl index 6f43d16..e2d85d0 100644 --- a/test/builtins/arrayLength/via_let.wgsl.expected.glsl +++ b/test/builtins/arrayLength/via_let.wgsl.expected.glsl
@@ -1,5 +1,3 @@ -SKIP: FAILED - #version 310 es precision mediump float; @@ -7,10 +5,7 @@ int a[]; } G; void tint_symbol() { - uint tint_symbol_2 = 0u; - G.GetDimensions(tint_symbol_2); - uint tint_symbol_3 = ((tint_symbol_2 - 0u) / 4u); - uint l1 = tint_symbol_3; + uint l1 = uint(G.a.length()); } layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in; @@ -18,10 +13,3 @@ tint_symbol(); return; } -Error parsing GLSL shader: -ERROR: 0:9: 'GetDimensions' : no such field in structure -ERROR: 0:9: '' : compilation terminated -ERROR: 2 compilation errors. No code generated. - - -
diff --git a/test/builtins/arrayLength/via_let_complex.wgsl.expected.glsl b/test/builtins/arrayLength/via_let_complex.wgsl.expected.glsl index 6f43d16..e2d85d0 100644 --- a/test/builtins/arrayLength/via_let_complex.wgsl.expected.glsl +++ b/test/builtins/arrayLength/via_let_complex.wgsl.expected.glsl
@@ -1,5 +1,3 @@ -SKIP: FAILED - #version 310 es precision mediump float; @@ -7,10 +5,7 @@ int a[]; } G; void tint_symbol() { - uint tint_symbol_2 = 0u; - G.GetDimensions(tint_symbol_2); - uint tint_symbol_3 = ((tint_symbol_2 - 0u) / 4u); - uint l1 = tint_symbol_3; + uint l1 = uint(G.a.length()); } layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in; @@ -18,10 +13,3 @@ tint_symbol(); return; } -Error parsing GLSL shader: -ERROR: 0:9: 'GetDimensions' : no such field in structure -ERROR: 0:9: '' : compilation terminated -ERROR: 2 compilation errors. No code generated. - - -
diff --git a/test/builtins/arrayLength/via_let_complex_no_struct.wgsl.expected.glsl b/test/builtins/arrayLength/via_let_complex_no_struct.wgsl.expected.glsl index 2df0269..f962064 100644 --- a/test/builtins/arrayLength/via_let_complex_no_struct.wgsl.expected.glsl +++ b/test/builtins/arrayLength/via_let_complex_no_struct.wgsl.expected.glsl
@@ -1,5 +1,3 @@ -SKIP: FAILED - #version 310 es precision mediump float; @@ -7,10 +5,7 @@ int inner[]; } G; void tint_symbol() { - uint tint_symbol_2 = 0u; - G.inner.GetDimensions(tint_symbol_2); - uint tint_symbol_3 = (tint_symbol_2 / 4u); - uint l1 = tint_symbol_3; + uint l1 = uint(G.inner.length()); } layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in; @@ -18,10 +13,3 @@ tint_symbol(); return; } -Error parsing GLSL shader: -ERROR: 0:9: '.' : cannot apply to an array: GetDimensions -ERROR: 0:9: '' : compilation terminated -ERROR: 2 compilation errors. No code generated. - - -
diff --git a/test/builtins/arrayLength/via_let_no_struct.wgsl.expected.glsl b/test/builtins/arrayLength/via_let_no_struct.wgsl.expected.glsl index 2df0269..f962064 100644 --- a/test/builtins/arrayLength/via_let_no_struct.wgsl.expected.glsl +++ b/test/builtins/arrayLength/via_let_no_struct.wgsl.expected.glsl
@@ -1,5 +1,3 @@ -SKIP: FAILED - #version 310 es precision mediump float; @@ -7,10 +5,7 @@ int inner[]; } G; void tint_symbol() { - uint tint_symbol_2 = 0u; - G.inner.GetDimensions(tint_symbol_2); - uint tint_symbol_3 = (tint_symbol_2 / 4u); - uint l1 = tint_symbol_3; + uint l1 = uint(G.inner.length()); } layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in; @@ -18,10 +13,3 @@ tint_symbol(); return; } -Error parsing GLSL shader: -ERROR: 0:9: '.' : cannot apply to an array: GetDimensions -ERROR: 0:9: '' : compilation terminated -ERROR: 2 compilation errors. No code generated. - - -
diff --git a/test/builtins/gen/arrayLength/1588cd.wgsl.expected.glsl b/test/builtins/gen/arrayLength/1588cd.wgsl.expected.glsl index af7a607..6c55ac3 100644 --- a/test/builtins/gen/arrayLength/1588cd.wgsl.expected.glsl +++ b/test/builtins/gen/arrayLength/1588cd.wgsl.expected.glsl
@@ -1,5 +1,3 @@ -SKIP: FAILED - #version 310 es precision mediump float; @@ -7,10 +5,7 @@ int arg_0[]; } sb_ro; void arrayLength_1588cd() { - uint tint_symbol_1 = 0u; - sb_ro.GetDimensions(tint_symbol_1); - uint tint_symbol_2 = ((tint_symbol_1 - 0u) / 4u); - uint res = tint_symbol_2; + uint res = uint(sb_ro.arg_0.length()); } vec4 vertex_main() { @@ -25,13 +20,6 @@ gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w); return; } -Error parsing GLSL shader: -ERROR: 0:9: 'GetDimensions' : no such field in structure -ERROR: 0:9: '' : compilation terminated -ERROR: 2 compilation errors. No code generated. - - - #version 310 es precision mediump float; @@ -39,10 +27,7 @@ int arg_0[]; } sb_ro; void arrayLength_1588cd() { - uint tint_symbol_1 = 0u; - sb_ro.GetDimensions(tint_symbol_1); - uint tint_symbol_2 = ((tint_symbol_1 - 0u) / 4u); - uint res = tint_symbol_2; + uint res = uint(sb_ro.arg_0.length()); } void fragment_main() { @@ -53,13 +38,6 @@ fragment_main(); return; } -Error parsing GLSL shader: -ERROR: 0:9: 'GetDimensions' : no such field in structure -ERROR: 0:9: '' : compilation terminated -ERROR: 2 compilation errors. No code generated. - - - #version 310 es precision mediump float; @@ -67,10 +45,7 @@ int arg_0[]; } sb_ro; void arrayLength_1588cd() { - uint tint_symbol_1 = 0u; - sb_ro.GetDimensions(tint_symbol_1); - uint tint_symbol_2 = ((tint_symbol_1 - 0u) / 4u); - uint res = tint_symbol_2; + uint res = uint(sb_ro.arg_0.length()); } void compute_main() { @@ -82,10 +57,3 @@ compute_main(); return; } -Error parsing GLSL shader: -ERROR: 0:9: 'GetDimensions' : no such field in structure -ERROR: 0:9: '' : compilation terminated -ERROR: 2 compilation errors. No code generated. - - -
diff --git a/test/builtins/gen/arrayLength/61b1c7.wgsl.expected.glsl b/test/builtins/gen/arrayLength/61b1c7.wgsl.expected.glsl index c8e824f..a5d0229 100644 --- a/test/builtins/gen/arrayLength/61b1c7.wgsl.expected.glsl +++ b/test/builtins/gen/arrayLength/61b1c7.wgsl.expected.glsl
@@ -1,5 +1,3 @@ -SKIP: FAILED - #version 310 es precision mediump float; @@ -7,10 +5,7 @@ int arg_0[]; } sb_rw; void arrayLength_61b1c7() { - uint tint_symbol_1 = 0u; - sb_rw.GetDimensions(tint_symbol_1); - uint tint_symbol_2 = ((tint_symbol_1 - 0u) / 4u); - uint res = tint_symbol_2; + uint res = uint(sb_rw.arg_0.length()); } vec4 vertex_main() { @@ -25,13 +20,6 @@ gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w); return; } -Error parsing GLSL shader: -ERROR: 0:9: 'GetDimensions' : no such field in structure -ERROR: 0:9: '' : compilation terminated -ERROR: 2 compilation errors. No code generated. - - - #version 310 es precision mediump float; @@ -39,10 +27,7 @@ int arg_0[]; } sb_rw; void arrayLength_61b1c7() { - uint tint_symbol_1 = 0u; - sb_rw.GetDimensions(tint_symbol_1); - uint tint_symbol_2 = ((tint_symbol_1 - 0u) / 4u); - uint res = tint_symbol_2; + uint res = uint(sb_rw.arg_0.length()); } void fragment_main() { @@ -53,13 +38,6 @@ fragment_main(); return; } -Error parsing GLSL shader: -ERROR: 0:9: 'GetDimensions' : no such field in structure -ERROR: 0:9: '' : compilation terminated -ERROR: 2 compilation errors. No code generated. - - - #version 310 es precision mediump float; @@ -67,10 +45,7 @@ int arg_0[]; } sb_rw; void arrayLength_61b1c7() { - uint tint_symbol_1 = 0u; - sb_rw.GetDimensions(tint_symbol_1); - uint tint_symbol_2 = ((tint_symbol_1 - 0u) / 4u); - uint res = tint_symbol_2; + uint res = uint(sb_rw.arg_0.length()); } void compute_main() { @@ -82,10 +57,3 @@ compute_main(); return; } -Error parsing GLSL shader: -ERROR: 0:9: 'GetDimensions' : no such field in structure -ERROR: 0:9: '' : compilation terminated -ERROR: 2 compilation errors. No code generated. - - -
diff --git a/test/builtins/gen/arrayLength/a0f5ca.wgsl.expected.glsl b/test/builtins/gen/arrayLength/a0f5ca.wgsl.expected.glsl index 730e08d..d0bf4a5 100644 --- a/test/builtins/gen/arrayLength/a0f5ca.wgsl.expected.glsl +++ b/test/builtins/gen/arrayLength/a0f5ca.wgsl.expected.glsl
@@ -1,5 +1,3 @@ -SKIP: FAILED - #version 310 es precision mediump float; @@ -7,10 +5,7 @@ float arg_0[]; } sb_ro; void arrayLength_a0f5ca() { - uint tint_symbol_1 = 0u; - sb_ro.GetDimensions(tint_symbol_1); - uint tint_symbol_2 = ((tint_symbol_1 - 0u) / 4u); - uint res = tint_symbol_2; + uint res = uint(sb_ro.arg_0.length()); } vec4 vertex_main() { @@ -25,13 +20,6 @@ gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w); return; } -Error parsing GLSL shader: -ERROR: 0:9: 'GetDimensions' : no such field in structure -ERROR: 0:9: '' : compilation terminated -ERROR: 2 compilation errors. No code generated. - - - #version 310 es precision mediump float; @@ -39,10 +27,7 @@ float arg_0[]; } sb_ro; void arrayLength_a0f5ca() { - uint tint_symbol_1 = 0u; - sb_ro.GetDimensions(tint_symbol_1); - uint tint_symbol_2 = ((tint_symbol_1 - 0u) / 4u); - uint res = tint_symbol_2; + uint res = uint(sb_ro.arg_0.length()); } void fragment_main() { @@ -53,13 +38,6 @@ fragment_main(); return; } -Error parsing GLSL shader: -ERROR: 0:9: 'GetDimensions' : no such field in structure -ERROR: 0:9: '' : compilation terminated -ERROR: 2 compilation errors. No code generated. - - - #version 310 es precision mediump float; @@ -67,10 +45,7 @@ float arg_0[]; } sb_ro; void arrayLength_a0f5ca() { - uint tint_symbol_1 = 0u; - sb_ro.GetDimensions(tint_symbol_1); - uint tint_symbol_2 = ((tint_symbol_1 - 0u) / 4u); - uint res = tint_symbol_2; + uint res = uint(sb_ro.arg_0.length()); } void compute_main() { @@ -82,10 +57,3 @@ compute_main(); return; } -Error parsing GLSL shader: -ERROR: 0:9: 'GetDimensions' : no such field in structure -ERROR: 0:9: '' : compilation terminated -ERROR: 2 compilation errors. No code generated. - - -
diff --git a/test/builtins/gen/arrayLength/cdd123.wgsl.expected.glsl b/test/builtins/gen/arrayLength/cdd123.wgsl.expected.glsl index 3367d5b..92e73df 100644 --- a/test/builtins/gen/arrayLength/cdd123.wgsl.expected.glsl +++ b/test/builtins/gen/arrayLength/cdd123.wgsl.expected.glsl
@@ -1,5 +1,3 @@ -SKIP: FAILED - #version 310 es precision mediump float; @@ -7,10 +5,7 @@ float arg_0[]; } sb_rw; void arrayLength_cdd123() { - uint tint_symbol_1 = 0u; - sb_rw.GetDimensions(tint_symbol_1); - uint tint_symbol_2 = ((tint_symbol_1 - 0u) / 4u); - uint res = tint_symbol_2; + uint res = uint(sb_rw.arg_0.length()); } vec4 vertex_main() { @@ -25,13 +20,6 @@ gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w); return; } -Error parsing GLSL shader: -ERROR: 0:9: 'GetDimensions' : no such field in structure -ERROR: 0:9: '' : compilation terminated -ERROR: 2 compilation errors. No code generated. - - - #version 310 es precision mediump float; @@ -39,10 +27,7 @@ float arg_0[]; } sb_rw; void arrayLength_cdd123() { - uint tint_symbol_1 = 0u; - sb_rw.GetDimensions(tint_symbol_1); - uint tint_symbol_2 = ((tint_symbol_1 - 0u) / 4u); - uint res = tint_symbol_2; + uint res = uint(sb_rw.arg_0.length()); } void fragment_main() { @@ -53,13 +38,6 @@ fragment_main(); return; } -Error parsing GLSL shader: -ERROR: 0:9: 'GetDimensions' : no such field in structure -ERROR: 0:9: '' : compilation terminated -ERROR: 2 compilation errors. No code generated. - - - #version 310 es precision mediump float; @@ -67,10 +45,7 @@ float arg_0[]; } sb_rw; void arrayLength_cdd123() { - uint tint_symbol_1 = 0u; - sb_rw.GetDimensions(tint_symbol_1); - uint tint_symbol_2 = ((tint_symbol_1 - 0u) / 4u); - uint res = tint_symbol_2; + uint res = uint(sb_rw.arg_0.length()); } void compute_main() { @@ -82,10 +57,3 @@ compute_main(); return; } -Error parsing GLSL shader: -ERROR: 0:9: 'GetDimensions' : no such field in structure -ERROR: 0:9: '' : compilation terminated -ERROR: 2 compilation errors. No code generated. - - -
diff --git a/test/builtins/gen/arrayLength/cfca0a.wgsl.expected.glsl b/test/builtins/gen/arrayLength/cfca0a.wgsl.expected.glsl index 55bfb57..99cab31 100644 --- a/test/builtins/gen/arrayLength/cfca0a.wgsl.expected.glsl +++ b/test/builtins/gen/arrayLength/cfca0a.wgsl.expected.glsl
@@ -1,5 +1,3 @@ -SKIP: FAILED - #version 310 es precision mediump float; @@ -7,10 +5,7 @@ uint arg_0[]; } sb_ro; void arrayLength_cfca0a() { - uint tint_symbol_1 = 0u; - sb_ro.GetDimensions(tint_symbol_1); - uint tint_symbol_2 = ((tint_symbol_1 - 0u) / 4u); - uint res = tint_symbol_2; + uint res = uint(sb_ro.arg_0.length()); } vec4 vertex_main() { @@ -25,13 +20,6 @@ gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w); return; } -Error parsing GLSL shader: -ERROR: 0:9: 'GetDimensions' : no such field in structure -ERROR: 0:9: '' : compilation terminated -ERROR: 2 compilation errors. No code generated. - - - #version 310 es precision mediump float; @@ -39,10 +27,7 @@ uint arg_0[]; } sb_ro; void arrayLength_cfca0a() { - uint tint_symbol_1 = 0u; - sb_ro.GetDimensions(tint_symbol_1); - uint tint_symbol_2 = ((tint_symbol_1 - 0u) / 4u); - uint res = tint_symbol_2; + uint res = uint(sb_ro.arg_0.length()); } void fragment_main() { @@ -53,13 +38,6 @@ fragment_main(); return; } -Error parsing GLSL shader: -ERROR: 0:9: 'GetDimensions' : no such field in structure -ERROR: 0:9: '' : compilation terminated -ERROR: 2 compilation errors. No code generated. - - - #version 310 es precision mediump float; @@ -67,10 +45,7 @@ uint arg_0[]; } sb_ro; void arrayLength_cfca0a() { - uint tint_symbol_1 = 0u; - sb_ro.GetDimensions(tint_symbol_1); - uint tint_symbol_2 = ((tint_symbol_1 - 0u) / 4u); - uint res = tint_symbol_2; + uint res = uint(sb_ro.arg_0.length()); } void compute_main() { @@ -82,10 +57,3 @@ compute_main(); return; } -Error parsing GLSL shader: -ERROR: 0:9: 'GetDimensions' : no such field in structure -ERROR: 0:9: '' : compilation terminated -ERROR: 2 compilation errors. No code generated. - - -
diff --git a/test/builtins/gen/arrayLength/eb510f.wgsl.expected.glsl b/test/builtins/gen/arrayLength/eb510f.wgsl.expected.glsl index e48d0cf..52cd14e 100644 --- a/test/builtins/gen/arrayLength/eb510f.wgsl.expected.glsl +++ b/test/builtins/gen/arrayLength/eb510f.wgsl.expected.glsl
@@ -1,5 +1,3 @@ -SKIP: FAILED - #version 310 es precision mediump float; @@ -7,10 +5,7 @@ uint arg_0[]; } sb_rw; void arrayLength_eb510f() { - uint tint_symbol_1 = 0u; - sb_rw.GetDimensions(tint_symbol_1); - uint tint_symbol_2 = ((tint_symbol_1 - 0u) / 4u); - uint res = tint_symbol_2; + uint res = uint(sb_rw.arg_0.length()); } vec4 vertex_main() { @@ -25,13 +20,6 @@ gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w); return; } -Error parsing GLSL shader: -ERROR: 0:9: 'GetDimensions' : no such field in structure -ERROR: 0:9: '' : compilation terminated -ERROR: 2 compilation errors. No code generated. - - - #version 310 es precision mediump float; @@ -39,10 +27,7 @@ uint arg_0[]; } sb_rw; void arrayLength_eb510f() { - uint tint_symbol_1 = 0u; - sb_rw.GetDimensions(tint_symbol_1); - uint tint_symbol_2 = ((tint_symbol_1 - 0u) / 4u); - uint res = tint_symbol_2; + uint res = uint(sb_rw.arg_0.length()); } void fragment_main() { @@ -53,13 +38,6 @@ fragment_main(); return; } -Error parsing GLSL shader: -ERROR: 0:9: 'GetDimensions' : no such field in structure -ERROR: 0:9: '' : compilation terminated -ERROR: 2 compilation errors. No code generated. - - - #version 310 es precision mediump float; @@ -67,10 +45,7 @@ uint arg_0[]; } sb_rw; void arrayLength_eb510f() { - uint tint_symbol_1 = 0u; - sb_rw.GetDimensions(tint_symbol_1); - uint tint_symbol_2 = ((tint_symbol_1 - 0u) / 4u); - uint res = tint_symbol_2; + uint res = uint(sb_rw.arg_0.length()); } void compute_main() { @@ -82,10 +57,3 @@ compute_main(); return; } -Error parsing GLSL shader: -ERROR: 0:9: 'GetDimensions' : no such field in structure -ERROR: 0:9: '' : compilation terminated -ERROR: 2 compilation errors. No code generated. - - -
diff --git a/test/unittest/reader/spirv/SpvParserMemoryTest_ArrayLength_FromAccessChain.spvasm.expected.glsl b/test/unittest/reader/spirv/SpvParserMemoryTest_ArrayLength_FromAccessChain.spvasm.expected.glsl index 2e8e85b..644c948 100644 --- a/test/unittest/reader/spirv/SpvParserMemoryTest_ArrayLength_FromAccessChain.spvasm.expected.glsl +++ b/test/unittest/reader/spirv/SpvParserMemoryTest_ArrayLength_FromAccessChain.spvasm.expected.glsl
@@ -13,10 +13,7 @@ uint rtarr[]; } myvar; void main_1() { - uint tint_symbol_2 = 0u; - myvar.GetDimensions(tint_symbol_2); - uint tint_symbol_3 = ((tint_symbol_2 - 4u) / 4u); - uint x_1 = tint_symbol_3; + uint x_1 = uint(myvar.rtarr.length()); return; }
diff --git a/test/unittest/reader/spirv/SpvParserMemoryTest_ArrayLength_FromVar.spvasm.expected.glsl b/test/unittest/reader/spirv/SpvParserMemoryTest_ArrayLength_FromVar.spvasm.expected.glsl index 2e8e85b..644c948 100644 --- a/test/unittest/reader/spirv/SpvParserMemoryTest_ArrayLength_FromVar.spvasm.expected.glsl +++ b/test/unittest/reader/spirv/SpvParserMemoryTest_ArrayLength_FromVar.spvasm.expected.glsl
@@ -13,10 +13,7 @@ uint rtarr[]; } myvar; void main_1() { - uint tint_symbol_2 = 0u; - myvar.GetDimensions(tint_symbol_2); - uint tint_symbol_3 = ((tint_symbol_2 - 4u) / 4u); - uint x_1 = tint_symbol_3; + uint x_1 = uint(myvar.rtarr.length()); return; }