HLSL: work around FXC failures when dynamically indexing arrays in structs
FXC fails to compile code that assigns to dynamically-indexed fixed-size
arrays in structs on internal shader variables with:
error X3500: array reference cannot be used as an l-value; not natively
addressable
This CL detects this case, and transforms such assignments into copying
out the array to a local variable, assigning to that local, and then
copying the array back.
Also manually regenerate SKIPs for HLSL/FXC after this change, which
fixes 30 tests. Also exposes some "compilation aborted unexpectedly" now
that "array reference cannot be used as an l-value" has been fixed. For
tests that fail for both DXC and FXC, updating SKIPs to the DXC one to
help distinguish actual FXC bugs from valid errors.
Bug: tint:998
Bug: tint:1206
Change-Id: I09204d8d81ab27d1c257538ad702414ccc386543
Reviewed-on: https://dawn-review.googlesource.com/c/tint/+/71620
Reviewed-by: Ben Clayton <bclayton@google.com>
Kokoro: Kokoro <noreply+kokoro@google.com>
Commit-Queue: Antonio Maiorano <amaiorano@google.com>
diff --git a/src/BUILD.gn b/src/BUILD.gn
index f88173b..1003f27 100644
--- a/src/BUILD.gn
+++ b/src/BUILD.gn
@@ -451,6 +451,8 @@
"transform/fold_trivial_single_use_lets.h",
"transform/for_loop_to_loop.cc",
"transform/for_loop_to_loop.h",
+ "transform/localize_struct_array_assignment.cc",
+ "transform/localize_struct_array_assignment.h",
"transform/loop_to_for_loop.cc",
"transform/loop_to_for_loop.h",
"transform/manager.cc",
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index 3994fed..10aeea6 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -312,6 +312,8 @@
transform/fold_constants.h
transform/fold_trivial_single_use_lets.cc
transform/fold_trivial_single_use_lets.h
+ transform/localize_struct_array_assignment.cc
+ transform/localize_struct_array_assignment.h
transform/for_loop_to_loop.cc
transform/for_loop_to_loop.h
transform/glsl.cc
@@ -971,6 +973,7 @@
transform/fold_constants_test.cc
transform/fold_trivial_single_use_lets_test.cc
transform/for_loop_to_loop_test.cc
+ transform/localize_struct_array_assignment_test.cc
transform/loop_to_for_loop_test.cc
transform/module_scope_var_to_entry_point_param_test.cc
transform/multiplanar_external_texture_test.cc
diff --git a/src/program_builder.h b/src/program_builder.h
index e440474..53929af 100644
--- a/src/program_builder.h
+++ b/src/program_builder.h
@@ -2468,6 +2468,15 @@
}
}
+ /// Unmarks that the given transform `T` has been applied to this program.
+ template <typename T>
+ void UnsetTransformApplied() {
+ auto it = transforms_applied_.find(&TypeInfo::Of<T>());
+ if (it != transforms_applied_.end()) {
+ transforms_applied_.erase(it);
+ }
+ }
+
/// @returns true if the transform of type `T` was applied.
template <typename T>
bool HasTransformApplied() {
diff --git a/src/transform/localize_struct_array_assignment.cc b/src/transform/localize_struct_array_assignment.cc
new file mode 100644
index 0000000..6d73ec9
--- /dev/null
+++ b/src/transform/localize_struct_array_assignment.cc
@@ -0,0 +1,230 @@
+// Copyright 2021 The Tint Authors.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+#include "src/transform/localize_struct_array_assignment.h"
+
+#include <unordered_map>
+#include <utility>
+
+#include "src/ast/assignment_statement.h"
+#include "src/ast/traverse_expressions.h"
+#include "src/program_builder.h"
+#include "src/sem/expression.h"
+#include "src/sem/member_accessor_expression.h"
+#include "src/sem/reference_type.h"
+#include "src/sem/statement.h"
+#include "src/sem/variable.h"
+#include "src/transform/simplify_pointers.h"
+#include "src/utils/scoped_assignment.h"
+
+TINT_INSTANTIATE_TYPEINFO(tint::transform::LocalizeStructArrayAssignment);
+
+namespace tint {
+namespace transform {
+
+/// Private implementation of LocalizeStructArrayAssignment transform
+class LocalizeStructArrayAssignment::State {
+ private:
+ CloneContext& ctx;
+ ProgramBuilder& b;
+
+ /// Returns true if `expr` contains an index accessor expression to a
+ /// structure member of array type.
+ bool ContainsStructArrayIndex(const ast::Expression* expr) {
+ bool result = false;
+ ast::TraverseExpressions(
+ expr, b.Diagnostics(), [&](const ast::IndexAccessorExpression* ia) {
+ // Indexing using a runtime value?
+ auto* idx_sem = ctx.src->Sem().Get(ia->index);
+ if (!idx_sem->ConstantValue().IsValid()) {
+ // Indexing a member access expr?
+ if (auto* ma = ia->object->As<ast::MemberAccessorExpression>()) {
+ // That accesses an array?
+ if (ctx.src->TypeOf(ma)->UnwrapRef()->Is<sem::Array>()) {
+ result = true;
+ return ast::TraverseAction::Stop;
+ }
+ }
+ }
+ return ast::TraverseAction::Descend;
+ });
+
+ return result;
+ }
+
+ // Returns the type and storage class of the originating variable of the lhs
+ // of the assignment statement.
+ // See https://www.w3.org/TR/WGSL/#originating-variable-section
+ std::pair<const sem::Type*, ast::StorageClass>
+ GetOriginatingTypeAndStorageClass(
+ const ast::AssignmentStatement* assign_stmt) {
+ // Get first IdentifierExpr from lhs of assignment, which should resolve to
+ // the pointer or reference of the originating variable of the assignment.
+ // TraverseExpressions traverses left to right, and this code depends on the
+ // fact that for an assignment statement, the variable will be the left-most
+ // expression.
+ // TODO(crbug.com/tint/1341): do this in the Resolver, setting the
+ // originating variable on sem::Expression.
+ const ast::IdentifierExpression* ident = nullptr;
+ ast::TraverseExpressions(assign_stmt->lhs, b.Diagnostics(),
+ [&](const ast::IdentifierExpression* id) {
+ ident = id;
+ return ast::TraverseAction::Stop;
+ });
+ auto* sem_var_user = ctx.src->Sem().Get<sem::VariableUser>(ident);
+ if (!sem_var_user) {
+ TINT_ICE(Transform, b.Diagnostics())
+ << "Expected to find variable of lhs of assignment statement";
+ return {};
+ }
+
+ auto* var = sem_var_user->Variable();
+ if (auto* ptr = var->Type()->As<sem::Pointer>()) {
+ return {ptr->StoreType(), ptr->StorageClass()};
+ }
+
+ auto* ref = var->Type()->As<sem::Reference>();
+ if (!ref) {
+ TINT_ICE(Transform, b.Diagnostics())
+ << "Expecting to find variable of type pointer or reference on lhs "
+ "of assignment statement";
+ return {};
+ }
+
+ return {ref->StoreType(), ref->StorageClass()};
+ }
+
+ public:
+ /// Constructor
+ /// @param ctx_in the CloneContext primed with the input program and
+ /// ProgramBuilder
+ explicit State(CloneContext& ctx_in) : ctx(ctx_in), b(*ctx_in.dst) {}
+
+ /// Runs the transform
+ void Run() {
+ struct Shared {
+ bool process_nested_nodes = false;
+ ast::StatementList insert_before_stmts;
+ ast::StatementList insert_after_stmts;
+ } s;
+
+ ctx.ReplaceAll([&](const ast::AssignmentStatement* assign_stmt)
+ -> const ast::Statement* {
+ // Process if it's an assignment statement to a dynamically indexed array
+ // within a struct on a function or private storage variable. This
+ // specific use-case is what FXC fails to compile with:
+ // error X3500: array reference cannot be used as an l-value; not natively
+ // addressable
+ if (!ContainsStructArrayIndex(assign_stmt->lhs)) {
+ return nullptr;
+ }
+ auto og = GetOriginatingTypeAndStorageClass(assign_stmt);
+ if (!(og.first->Is<sem::Struct>() &&
+ (og.second == ast::StorageClass::kFunction ||
+ og.second == ast::StorageClass::kPrivate))) {
+ return nullptr;
+ }
+
+ // Reset shared state for this assignment statement
+ s = Shared{};
+
+ const ast::Expression* new_lhs = nullptr;
+ {
+ TINT_SCOPED_ASSIGNMENT(s.process_nested_nodes, true);
+ new_lhs = ctx.Clone(assign_stmt->lhs);
+ }
+
+ auto* new_assign_stmt = b.Assign(new_lhs, ctx.Clone(assign_stmt->rhs));
+
+ // Combine insert_before_stmts + new_assign_stmt + insert_after_stmts into
+ // a block and return it
+ ast::StatementList stmts = std::move(s.insert_before_stmts);
+ stmts.reserve(1 + s.insert_after_stmts.size());
+ stmts.emplace_back(new_assign_stmt);
+ stmts.insert(stmts.end(), s.insert_after_stmts.begin(),
+ s.insert_after_stmts.end());
+
+ return b.Block(std::move(stmts));
+ });
+
+ ctx.ReplaceAll([&](const ast::IndexAccessorExpression* index_access)
+ -> const ast::Expression* {
+ if (!s.process_nested_nodes) {
+ return nullptr;
+ }
+
+ // Indexing a member access expr?
+ auto* mem_access =
+ index_access->object->As<ast::MemberAccessorExpression>();
+ if (!mem_access) {
+ return nullptr;
+ }
+
+ // Process any nested IndexAccessorExpressions
+ mem_access = ctx.Clone(mem_access);
+
+ // Store the address of the member access into a let as we need to read
+ // the value twice e.g. let tint_symbol = &(s.a1);
+ auto mem_access_ptr = b.Sym();
+ s.insert_before_stmts.push_back(
+ b.Decl(b.Const(mem_access_ptr, nullptr, b.AddressOf(mem_access))));
+
+ // Disable further transforms when cloning
+ TINT_SCOPED_ASSIGNMENT(s.process_nested_nodes, false);
+
+ // Copy entire array out of struct into local temp var
+ // e.g. var tint_symbol_1 = *(tint_symbol);
+ auto tmp_var = b.Sym();
+ s.insert_before_stmts.push_back(
+ b.Decl(b.Var(tmp_var, nullptr, b.Deref(mem_access_ptr))));
+
+ // Replace input index_access with a clone of itself, but with its
+ // .object replaced by the new temp var. This is returned from this
+ // function to modify the original assignment statement. e.g.
+ // tint_symbol_1[uniforms.i]
+ auto* new_index_access =
+ b.IndexAccessor(tmp_var, ctx.Clone(index_access->index));
+
+ // Assign temp var back to array
+ // e.g. *(tint_symbol) = tint_symbol_1;
+ auto* assign_rhs_to_temp = b.Assign(b.Deref(mem_access_ptr), tmp_var);
+ s.insert_after_stmts.insert(s.insert_after_stmts.begin(),
+ assign_rhs_to_temp); // push_front
+
+ return new_index_access;
+ });
+
+ ctx.Clone();
+ }
+};
+
+LocalizeStructArrayAssignment::LocalizeStructArrayAssignment() = default;
+
+LocalizeStructArrayAssignment::~LocalizeStructArrayAssignment() = default;
+
+void LocalizeStructArrayAssignment::Run(CloneContext& ctx,
+ const DataMap&,
+ DataMap&) {
+ if (!Requires<SimplifyPointers>(ctx)) {
+ return;
+ }
+
+ State state(ctx);
+ state.Run();
+
+ // This transform may introduce pointers
+ ctx.dst->UnsetTransformApplied<transform::SimplifyPointers>();
+}
+} // namespace transform
+} // namespace tint
diff --git a/src/transform/localize_struct_array_assignment.h b/src/transform/localize_struct_array_assignment.h
new file mode 100644
index 0000000..ce56e14
--- /dev/null
+++ b/src/transform/localize_struct_array_assignment.h
@@ -0,0 +1,53 @@
+// Copyright 2021 The Tint Authors.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+#ifndef SRC_TRANSFORM_LOCALIZE_STRUCT_ARRAY_ASSIGNMENT_H_
+#define SRC_TRANSFORM_LOCALIZE_STRUCT_ARRAY_ASSIGNMENT_H_
+
+#include "src/transform/transform.h"
+
+namespace tint {
+namespace transform {
+
+/// This transforms replaces assignment to dynamically-indexed fixed-size arrays
+/// in structs on shader-local variables with code that copies the arrays to a
+/// temporary local variable, assigns to the local variable, and copies the
+/// array back. This is to work around FXC's compilation failure for these cases
+/// (see crbug.com/tint/1206).
+class LocalizeStructArrayAssignment
+ : public Castable<LocalizeStructArrayAssignment, Transform> {
+ public:
+ /// Constructor
+ LocalizeStructArrayAssignment();
+
+ /// Destructor
+ ~LocalizeStructArrayAssignment() override;
+
+ protected:
+ /// Runs the transform using the CloneContext built for transforming a
+ /// program. Run() is responsible for calling Clone() on the CloneContext.
+ /// @param ctx the CloneContext primed with the input program and
+ /// ProgramBuilder
+ /// @param inputs optional extra transform-specific input data
+ /// @param outputs optional extra transform-specific output data
+ void Run(CloneContext& ctx, const DataMap& inputs, DataMap& outputs) override;
+
+ private:
+ class State;
+};
+
+} // namespace transform
+} // namespace tint
+
+#endif // SRC_TRANSFORM_LOCALIZE_STRUCT_ARRAY_ASSIGNMENT_H_
diff --git a/src/transform/localize_struct_array_assignment_test.cc b/src/transform/localize_struct_array_assignment_test.cc
new file mode 100644
index 0000000..197aa02
--- /dev/null
+++ b/src/transform/localize_struct_array_assignment_test.cc
@@ -0,0 +1,620 @@
+// Copyright 2021 The Tint Authors.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+#include "src/transform/localize_struct_array_assignment.h"
+#include "src/transform/simplify_pointers.h"
+#include "src/transform/unshadow.h"
+
+#include "src/transform/test_helper.h"
+
+namespace tint {
+namespace transform {
+namespace {
+
+using LocalizeStructArrayAssignmentTest = TransformTest;
+
+TEST_F(LocalizeStructArrayAssignmentTest, MissingSimplifyPointers) {
+ auto* src = R"()";
+ auto* expect =
+ "error: tint::transform::LocalizeStructArrayAssignment depends on "
+ "tint::transform::SimplifyPointers but the dependency was not run";
+
+ auto got = Run<LocalizeStructArrayAssignment>(src);
+ EXPECT_EQ(expect, str(got));
+}
+
+TEST_F(LocalizeStructArrayAssignmentTest, EmptyModule) {
+ auto* src = R"()";
+ auto* expect = src;
+ auto got =
+ Run<Unshadow, SimplifyPointers, LocalizeStructArrayAssignment>(src);
+ EXPECT_EQ(expect, str(got));
+}
+
+TEST_F(LocalizeStructArrayAssignmentTest, StructArray) {
+ auto* src = R"(
+[[block]] struct Uniforms {
+ i : u32;
+};
+
+struct InnerS {
+ v : i32;
+};
+
+struct OuterS {
+ a1 : array<InnerS, 8>;
+};
+
+[[group(1), binding(4)]] var<uniform> uniforms : Uniforms;
+
+[[stage(compute), workgroup_size(1)]]
+fn main() {
+ var v : InnerS;
+ var s1 : OuterS;
+ s1.a1[uniforms.i] = v;
+}
+)";
+
+ auto* expect = R"(
+[[block]]
+struct Uniforms {
+ i : u32;
+};
+
+struct InnerS {
+ v : i32;
+};
+
+struct OuterS {
+ a1 : array<InnerS, 8>;
+};
+
+[[group(1), binding(4)]] var<uniform> uniforms : Uniforms;
+
+[[stage(compute), workgroup_size(1)]]
+fn main() {
+ var v : InnerS;
+ var s1 : OuterS;
+ {
+ let tint_symbol = &(s1.a1);
+ var tint_symbol_1 = *(tint_symbol);
+ tint_symbol_1[uniforms.i] = v;
+ *(tint_symbol) = tint_symbol_1;
+ }
+}
+)";
+
+ auto got =
+ Run<Unshadow, SimplifyPointers, LocalizeStructArrayAssignment>(src);
+ EXPECT_EQ(expect, str(got));
+}
+
+TEST_F(LocalizeStructArrayAssignmentTest, StructStructArray) {
+ auto* src = R"(
+[[block]] struct Uniforms {
+ i : u32;
+};
+
+struct InnerS {
+ v : i32;
+};
+
+struct S1 {
+ a : array<InnerS, 8>;
+};
+
+struct OuterS {
+ s2 : S1;
+};
+
+[[group(1), binding(4)]] var<uniform> uniforms : Uniforms;
+
+[[stage(compute), workgroup_size(1)]]
+fn main() {
+ var v : InnerS;
+ var s1 : OuterS;
+ s1.s2.a[uniforms.i] = v;
+}
+)";
+
+ auto* expect = R"(
+[[block]]
+struct Uniforms {
+ i : u32;
+};
+
+struct InnerS {
+ v : i32;
+};
+
+struct S1 {
+ a : array<InnerS, 8>;
+};
+
+struct OuterS {
+ s2 : S1;
+};
+
+[[group(1), binding(4)]] var<uniform> uniforms : Uniforms;
+
+[[stage(compute), workgroup_size(1)]]
+fn main() {
+ var v : InnerS;
+ var s1 : OuterS;
+ {
+ let tint_symbol = &(s1.s2.a);
+ var tint_symbol_1 = *(tint_symbol);
+ tint_symbol_1[uniforms.i] = v;
+ *(tint_symbol) = tint_symbol_1;
+ }
+}
+)";
+
+ auto got =
+ Run<Unshadow, SimplifyPointers, LocalizeStructArrayAssignment>(src);
+ EXPECT_EQ(expect, str(got));
+}
+
+TEST_F(LocalizeStructArrayAssignmentTest, StructArrayArray) {
+ auto* src = R"(
+[[block]] struct Uniforms {
+ i : u32;
+ j : u32;
+};
+
+struct InnerS {
+ v : i32;
+};
+
+struct OuterS {
+ a1 : array<array<InnerS, 8>, 8>;
+};
+
+[[group(1), binding(4)]] var<uniform> uniforms : Uniforms;
+
+[[stage(compute), workgroup_size(1)]]
+fn main() {
+ var v : InnerS;
+ var s1 : OuterS;
+ s1.a1[uniforms.i][uniforms.j] = v;
+}
+)";
+
+ auto* expect = R"(
+[[block]]
+struct Uniforms {
+ i : u32;
+ j : u32;
+};
+
+struct InnerS {
+ v : i32;
+};
+
+struct OuterS {
+ a1 : array<array<InnerS, 8>, 8>;
+};
+
+[[group(1), binding(4)]] var<uniform> uniforms : Uniforms;
+
+[[stage(compute), workgroup_size(1)]]
+fn main() {
+ var v : InnerS;
+ var s1 : OuterS;
+ {
+ let tint_symbol = &(s1.a1);
+ var tint_symbol_1 = *(tint_symbol);
+ tint_symbol_1[uniforms.i][uniforms.j] = v;
+ *(tint_symbol) = tint_symbol_1;
+ }
+}
+)";
+
+ auto got =
+ Run<Unshadow, SimplifyPointers, LocalizeStructArrayAssignment>(src);
+ EXPECT_EQ(expect, str(got));
+}
+
+TEST_F(LocalizeStructArrayAssignmentTest, StructArrayStruct) {
+ auto* src = R"(
+[[block]] struct Uniforms {
+ i : u32;
+};
+
+struct InnerS {
+ v : i32;
+};
+
+struct S1 {
+ s2 : InnerS;
+};
+
+struct OuterS {
+ a1 : array<S1, 8>;
+};
+
+[[group(1), binding(4)]] var<uniform> uniforms : Uniforms;
+
+[[stage(compute), workgroup_size(1)]]
+fn main() {
+ var v : InnerS;
+ var s1 : OuterS;
+ s1.a1[uniforms.i].s2 = v;
+}
+)";
+
+ auto* expect = R"(
+[[block]]
+struct Uniforms {
+ i : u32;
+};
+
+struct InnerS {
+ v : i32;
+};
+
+struct S1 {
+ s2 : InnerS;
+};
+
+struct OuterS {
+ a1 : array<S1, 8>;
+};
+
+[[group(1), binding(4)]] var<uniform> uniforms : Uniforms;
+
+[[stage(compute), workgroup_size(1)]]
+fn main() {
+ var v : InnerS;
+ var s1 : OuterS;
+ {
+ let tint_symbol = &(s1.a1);
+ var tint_symbol_1 = *(tint_symbol);
+ tint_symbol_1[uniforms.i].s2 = v;
+ *(tint_symbol) = tint_symbol_1;
+ }
+}
+)";
+
+ auto got =
+ Run<Unshadow, SimplifyPointers, LocalizeStructArrayAssignment>(src);
+ EXPECT_EQ(expect, str(got));
+}
+
+TEST_F(LocalizeStructArrayAssignmentTest, StructArrayStructArray) {
+ auto* src = R"(
+[[block]] struct Uniforms {
+ i : u32;
+ j : u32;
+};
+
+struct InnerS {
+ v : i32;
+};
+
+struct S1 {
+ a2 : array<InnerS, 8>;
+};
+
+struct OuterS {
+ a1 : array<S1, 8>;
+};
+
+[[group(1), binding(4)]] var<uniform> uniforms : Uniforms;
+
+[[stage(compute), workgroup_size(1)]]
+fn main() {
+ var v : InnerS;
+ var s : OuterS;
+ s.a1[uniforms.i].a2[uniforms.j] = v;
+}
+)";
+
+ auto* expect = R"(
+[[block]]
+struct Uniforms {
+ i : u32;
+ j : u32;
+};
+
+struct InnerS {
+ v : i32;
+};
+
+struct S1 {
+ a2 : array<InnerS, 8>;
+};
+
+struct OuterS {
+ a1 : array<S1, 8>;
+};
+
+[[group(1), binding(4)]] var<uniform> uniforms : Uniforms;
+
+[[stage(compute), workgroup_size(1)]]
+fn main() {
+ var v : InnerS;
+ var s : OuterS;
+ {
+ let tint_symbol = &(s.a1);
+ var tint_symbol_1 = *(tint_symbol);
+ let tint_symbol_2 = &(tint_symbol_1[uniforms.i].a2);
+ var tint_symbol_3 = *(tint_symbol_2);
+ tint_symbol_3[uniforms.j] = v;
+ *(tint_symbol_2) = tint_symbol_3;
+ *(tint_symbol) = tint_symbol_1;
+ }
+}
+)";
+
+ auto got =
+ Run<Unshadow, SimplifyPointers, LocalizeStructArrayAssignment>(src);
+ EXPECT_EQ(expect, str(got));
+}
+
+TEST_F(LocalizeStructArrayAssignmentTest, IndexingWithSideEffectFunc) {
+ auto* src = R"(
+[[block]] struct Uniforms {
+ i : u32;
+ j : u32;
+};
+
+struct InnerS {
+ v : i32;
+};
+
+struct S1 {
+ a2 : array<InnerS, 8>;
+};
+
+struct OuterS {
+ a1 : array<S1, 8>;
+};
+
+var<private> nextIndex : u32;
+fn getNextIndex() -> u32 {
+ nextIndex = nextIndex + 1u;
+ return nextIndex;
+}
+
+[[group(1), binding(4)]] var<uniform> uniforms : Uniforms;
+
+[[stage(compute), workgroup_size(1)]]
+fn main() {
+ var v : InnerS;
+ var s : OuterS;
+ s.a1[getNextIndex()].a2[uniforms.j] = v;
+}
+)";
+
+ auto* expect = R"(
+[[block]]
+struct Uniforms {
+ i : u32;
+ j : u32;
+};
+
+struct InnerS {
+ v : i32;
+};
+
+struct S1 {
+ a2 : array<InnerS, 8>;
+};
+
+struct OuterS {
+ a1 : array<S1, 8>;
+};
+
+var<private> nextIndex : u32;
+
+fn getNextIndex() -> u32 {
+ nextIndex = (nextIndex + 1u);
+ return nextIndex;
+}
+
+[[group(1), binding(4)]] var<uniform> uniforms : Uniforms;
+
+[[stage(compute), workgroup_size(1)]]
+fn main() {
+ var v : InnerS;
+ var s : OuterS;
+ {
+ let tint_symbol = &(s.a1);
+ var tint_symbol_1 = *(tint_symbol);
+ let tint_symbol_2 = &(tint_symbol_1[getNextIndex()].a2);
+ var tint_symbol_3 = *(tint_symbol_2);
+ tint_symbol_3[uniforms.j] = v;
+ *(tint_symbol_2) = tint_symbol_3;
+ *(tint_symbol) = tint_symbol_1;
+ }
+}
+)";
+
+ auto got =
+ Run<Unshadow, SimplifyPointers, LocalizeStructArrayAssignment>(src);
+ EXPECT_EQ(expect, str(got));
+}
+
+TEST_F(LocalizeStructArrayAssignmentTest, ViaPointerArg) {
+ auto* src = R"(
+[[block]] struct Uniforms {
+ i : u32;
+};
+struct InnerS {
+ v : i32;
+};
+struct OuterS {
+ a1 : array<InnerS, 8>;
+};
+[[group(1), binding(4)]] var<uniform> uniforms : Uniforms;
+
+fn f(p : ptr<function, OuterS>) {
+ var v : InnerS;
+ (*p).a1[uniforms.i] = v;
+}
+
+[[stage(compute), workgroup_size(1)]]
+fn main() {
+ var s1 : OuterS;
+ f(&s1);
+}
+)";
+
+ auto* expect = R"(
+[[block]]
+struct Uniforms {
+ i : u32;
+};
+
+struct InnerS {
+ v : i32;
+};
+
+struct OuterS {
+ a1 : array<InnerS, 8>;
+};
+
+[[group(1), binding(4)]] var<uniform> uniforms : Uniforms;
+
+fn f(p : ptr<function, OuterS>) {
+ var v : InnerS;
+ {
+ let tint_symbol = &((*(p)).a1);
+ var tint_symbol_1 = *(tint_symbol);
+ tint_symbol_1[uniforms.i] = v;
+ *(tint_symbol) = tint_symbol_1;
+ }
+}
+
+[[stage(compute), workgroup_size(1)]]
+fn main() {
+ var s1 : OuterS;
+ f(&(s1));
+}
+)";
+
+ auto got =
+ Run<Unshadow, SimplifyPointers, LocalizeStructArrayAssignment>(src);
+ EXPECT_EQ(expect, str(got));
+}
+
+TEST_F(LocalizeStructArrayAssignmentTest, ViaPointerVar) {
+ auto* src = R"(
+[[block]]
+struct Uniforms {
+ i : u32;
+};
+
+struct InnerS {
+ v : i32;
+};
+
+struct OuterS {
+ a1 : array<InnerS, 8>;
+};
+
+[[group(1), binding(4)]] var<uniform> uniforms : Uniforms;
+
+fn f(p : ptr<function, InnerS>, v : InnerS) {
+ *(p) = v;
+}
+
+[[stage(compute), workgroup_size(1)]]
+fn main() {
+ var v : InnerS;
+ var s1 : OuterS;
+ let p = &(s1.a1[uniforms.i]);
+ *(p) = v;
+}
+)";
+
+ auto* expect = R"(
+[[block]]
+struct Uniforms {
+ i : u32;
+};
+
+struct InnerS {
+ v : i32;
+};
+
+struct OuterS {
+ a1 : array<InnerS, 8>;
+};
+
+[[group(1), binding(4)]] var<uniform> uniforms : Uniforms;
+
+fn f(p : ptr<function, InnerS>, v : InnerS) {
+ *(p) = v;
+}
+
+[[stage(compute), workgroup_size(1)]]
+fn main() {
+ var v : InnerS;
+ var s1 : OuterS;
+ let p_save = uniforms.i;
+ {
+ let tint_symbol = &(s1.a1);
+ var tint_symbol_1 = *(tint_symbol);
+ tint_symbol_1[p_save] = v;
+ *(tint_symbol) = tint_symbol_1;
+ }
+}
+)";
+
+ auto got =
+ Run<Unshadow, SimplifyPointers, LocalizeStructArrayAssignment>(src);
+ EXPECT_EQ(expect, str(got));
+}
+
+TEST_F(LocalizeStructArrayAssignmentTest, VectorAssignment) {
+ auto* src = R"(
+[[block]]
+struct Uniforms {
+ i : u32;
+};
+
+[[block]]
+struct OuterS {
+ a1 : array<u32, 8>;
+};
+
+[[group(1), binding(4)]] var<uniform> uniforms : Uniforms;
+
+fn f(i : u32) -> u32 {
+ return (i + 1u);
+}
+
+[[stage(compute), workgroup_size(1)]]
+fn main() {
+ var s1 : OuterS;
+ var v : vec3<f32>;
+ v[s1.a1[uniforms.i]] = 1.0;
+ v[f(s1.a1[uniforms.i])] = 1.0;
+}
+)";
+
+ // Transform does nothing here as we're not actually assigning to the array in
+ // the struct.
+ auto* expect = src;
+
+ auto got =
+ Run<Unshadow, SimplifyPointers, LocalizeStructArrayAssignment>(src);
+ EXPECT_EQ(expect, str(got));
+}
+
+} // namespace
+} // namespace transform
+} // namespace tint
diff --git a/src/writer/hlsl/generator_impl.cc b/src/writer/hlsl/generator_impl.cc
index c66278f..82c36cb 100644
--- a/src/writer/hlsl/generator_impl.cc
+++ b/src/writer/hlsl/generator_impl.cc
@@ -51,6 +51,7 @@
#include "src/transform/decompose_memory_access.h"
#include "src/transform/external_texture_transform.h"
#include "src/transform/fold_trivial_single_use_lets.h"
+#include "src/transform/localize_struct_array_assignment.h"
#include "src/transform/loop_to_for_loop.h"
#include "src/transform/manager.h"
#include "src/transform/num_workgroups_from_uniform.h"
@@ -145,6 +146,15 @@
manager.Add<transform::Unshadow>();
+ // LocalizeStructArrayAssignment must come after:
+ // * SimplifyPointers, because it assumes assignment to arrays in structs are
+ // done directly, not indirectly.
+ // TODO(crbug.com/tint/1340): See if we can get rid of the duplicate
+ // SimplifyPointers transform. Can't do it right now because
+ // LocalizeStructArrayAssignment introduces pointers.
+ manager.Add<transform::SimplifyPointers>();
+ manager.Add<transform::LocalizeStructArrayAssignment>();
+
// Attempt to convert `loop`s into for-loops. This is to try and massage the
// output into something that will not cause FXC to choke or misbehave.
manager.Add<transform::FoldTrivialSingleUseLets>();
diff --git a/test/BUILD.gn b/test/BUILD.gn
index cf1c258..4403a24 100644
--- a/test/BUILD.gn
+++ b/test/BUILD.gn
@@ -314,6 +314,7 @@
"../src/transform/fold_constants_test.cc",
"../src/transform/fold_trivial_single_use_lets_test.cc",
"../src/transform/for_loop_to_loop_test.cc",
+ "../src/transform/localize_struct_array_assignment_test.cc",
"../src/transform/loop_to_for_loop_test.cc",
"../src/transform/module_scope_var_to_entry_point_param_test.cc",
"../src/transform/multiplanar_external_texture_test.cc",
diff --git a/test/bug/fxc/dyn_array_idx/write/function.wgsl.expected.hlsl b/test/bug/fxc/dyn_array_idx/write/function.wgsl.expected.hlsl
deleted file mode 100644
index 04d50a1..0000000
--- a/test/bug/fxc/dyn_array_idx/write/function.wgsl.expected.hlsl
+++ /dev/null
@@ -1,21 +0,0 @@
-SKIP: FAILED
-
-cbuffer cbuffer_ubo : register(b0, space0) {
- uint4 ubo[1];
-};
-
-struct S {
- int data[64];
-};
-
-RWByteAddressBuffer result : register(u1, space0);
-
-[numthreads(1, 1, 1)]
-void f() {
- S s = (S)0;
- s.data[asint(ubo[0].x)] = 1;
- result.Store(0u, asuint(s.data[3]));
- return;
-}
-C:\src\tint\test\Shader@0x000002C587F87250(14,3-25): error X3500: array reference cannot be used as an l-value; not natively addressable
-
diff --git a/test/bug/fxc/dyn_array_idx/write/function_via_param.wgsl.expected.hlsl b/test/bug/fxc/dyn_array_idx/write/function_via_param.wgsl.expected.hlsl
deleted file mode 100644
index 59669b3..0000000
--- a/test/bug/fxc/dyn_array_idx/write/function_via_param.wgsl.expected.hlsl
+++ /dev/null
@@ -1,25 +0,0 @@
-SKIP: FAILED
-
-cbuffer cbuffer_ubo : register(b0, space0) {
- uint4 ubo[1];
-};
-
-struct S {
- int data[64];
-};
-
-RWByteAddressBuffer result : register(u1, space0);
-
-void x(inout S p) {
- p.data[asint(ubo[0].x)] = 1;
-}
-
-[numthreads(1, 1, 1)]
-void f() {
- S s = (S)0;
- x(s);
- result.Store(0u, asuint(s.data[3]));
- return;
-}
-C:\src\tint\test\Shader@0x000002338E919910(12,3-25): error X3500: array reference cannot be used as an l-value; not natively addressable
-
diff --git a/test/bug/fxc/dyn_array_idx/write/private.wgsl.expected.hlsl b/test/bug/fxc/dyn_array_idx/write/private.wgsl.expected.hlsl
deleted file mode 100644
index 1ef5a38..0000000
--- a/test/bug/fxc/dyn_array_idx/write/private.wgsl.expected.hlsl
+++ /dev/null
@@ -1,21 +0,0 @@
-SKIP: FAILED
-
-cbuffer cbuffer_ubo : register(b0, space0) {
- uint4 ubo[1];
-};
-
-struct S {
- int data[64];
-};
-
-RWByteAddressBuffer result : register(u1, space0);
-static S s = (S)0;
-
-[numthreads(1, 1, 1)]
-void f() {
- s.data[asint(ubo[0].x)] = 1;
- result.Store(0u, asuint(s.data[3]));
- return;
-}
-C:\src\tint\test\Shader@0x000001D94063C630(14,3-25): error X3500: array reference cannot be used as an l-value; not natively addressable
-
diff --git a/test/bug/fxc/dyn_array_idx/write/private_via_param.wgsl.expected.hlsl b/test/bug/fxc/dyn_array_idx/write/private_via_param.wgsl.expected.hlsl
deleted file mode 100644
index ed009a4..0000000
--- a/test/bug/fxc/dyn_array_idx/write/private_via_param.wgsl.expected.hlsl
+++ /dev/null
@@ -1,25 +0,0 @@
-SKIP: FAILED
-
-cbuffer cbuffer_ubo : register(b0, space0) {
- uint4 ubo[1];
-};
-
-struct S {
- int data[64];
-};
-
-RWByteAddressBuffer result : register(u1, space0);
-static S s = (S)0;
-
-void x(inout S p) {
- p.data[asint(ubo[0].x)] = 1;
-}
-
-[numthreads(1, 1, 1)]
-void f() {
- x(s);
- result.Store(0u, asuint(s.data[3]));
- return;
-}
-C:\src\tint\test\Shader@0x0000018B80081AA0(13,3-25): error X3500: array reference cannot be used as an l-value; not natively addressable
-
diff --git a/test/bug/fxc/indexed_assign_to_array_in_struct/1206.wgsl b/test/bug/fxc/indexed_assign_to_array_in_struct/1206.wgsl
new file mode 100644
index 0000000..df48e4c
--- /dev/null
+++ b/test/bug/fxc/indexed_assign_to_array_in_struct/1206.wgsl
@@ -0,0 +1,23 @@
+struct Simulation {
+ i : u32;
+};
+
+struct Particle {
+ position : array<vec3<f32>, 8>;
+ lifetime : f32;
+ color : vec4<f32>;
+ velocity : vec3<f32>;
+};
+
+struct Particles {
+ p : array<Particle>;
+};
+
+[[group(1), binding(3)]] var<storage, read> particles : Particles;
+[[group(1), binding(4)]] var<uniform> sim : Simulation;
+
+[[stage(compute), workgroup_size(1)]]
+fn main() {
+ var particle = particles.p[0];
+ particle.position[sim.i] = particle.position[sim.i];
+}
diff --git a/test/bug/fxc/indexed_assign_to_array_in_struct/1206.wgsl.expected.hlsl b/test/bug/fxc/indexed_assign_to_array_in_struct/1206.wgsl.expected.hlsl
new file mode 100644
index 0000000..e130294
--- /dev/null
+++ b/test/bug/fxc/indexed_assign_to_array_in_struct/1206.wgsl.expected.hlsl
@@ -0,0 +1,38 @@
+struct Particle {
+ float3 position[8];
+ float lifetime;
+ float4 color;
+ float3 velocity;
+};
+
+ByteAddressBuffer particles : register(t3, space1);
+cbuffer cbuffer_sim : register(b4, space1) {
+ uint4 sim[1];
+};
+
+typedef float3 tint_symbol_3_ret[8];
+tint_symbol_3_ret tint_symbol_3(ByteAddressBuffer buffer, uint offset) {
+ float3 arr[8] = (float3[8])0;
+ {
+ [loop] for(uint i_1 = 0u; (i_1 < 8u); i_1 = (i_1 + 1u)) {
+ arr[i_1] = asfloat(buffer.Load3((offset + (i_1 * 16u))));
+ }
+ }
+ return arr;
+}
+
+Particle tint_symbol_2(ByteAddressBuffer buffer, uint offset) {
+ const Particle tint_symbol_8 = {tint_symbol_3(buffer, (offset + 0u)), asfloat(buffer.Load((offset + 128u))), asfloat(buffer.Load4((offset + 144u))), asfloat(buffer.Load3((offset + 160u)))};
+ return tint_symbol_8;
+}
+
+[numthreads(1, 1, 1)]
+void main() {
+ Particle particle = tint_symbol_2(particles, (176u * uint(0)));
+ {
+ float3 tint_symbol_1[8] = particle.position;
+ tint_symbol_1[sim[0].x] = particle.position[sim[0].x];
+ particle.position = tint_symbol_1;
+ }
+ return;
+}
diff --git a/test/bug/tint/749.spvasm.expected.hlsl b/test/bug/tint/749.spvasm.expected.hlsl
deleted file mode 100644
index 48ad9ae..0000000
--- a/test/bug/tint/749.spvasm.expected.hlsl
+++ /dev/null
@@ -1,1566 +0,0 @@
-SKIP: FAILED
-
-struct QuicksortObject {
- int numbers[10];
-};
-
-static QuicksortObject obj = (QuicksortObject)0;
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_188 : register(b0, space0) {
- uint4 x_188[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void swap_i1_i1_(inout int i, inout int j) {
- int temp = 0;
- const int x_932 = temp;
- temp = 0;
- temp = x_932;
- const float3 x_523 = float3(float3(1.0f, 2.0f, 3.0f).z, float3(1.0f, 2.0f, 3.0f).y, float3(1.0f, 2.0f, 3.0f).z);
- const int x_933 = i;
- i = 0;
- i = x_933;
- const int x_28 = i;
- const int x_934 = j;
- j = 0;
- j = x_934;
- const float3 x_524 = float3(x_523.y, x_523.x, x_523.y);
- const int x_935 = temp;
- temp = 0;
- temp = x_935;
- const int x_30_save = x_28;
- const int x_936 = obj.numbers[x_30_save];
- obj.numbers[x_30_save] = 0;
- obj.numbers[x_30_save] = x_936;
- const int x_31 = obj.numbers[x_30_save];
- const int x_937 = temp;
- temp = 0;
- temp = x_937;
- temp = x_31;
- const int x_938 = j;
- j = 0;
- j = x_938;
- const float3 x_525 = float3(x_523.z, float3(1.0f, 2.0f, 3.0f).x, x_523.y);
- const int x_939 = i;
- i = 0;
- i = x_939;
- const int x_32 = i;
- const int x_940 = obj.numbers[x_30_save];
- obj.numbers[x_30_save] = 0;
- obj.numbers[x_30_save] = x_940;
- const int x_33 = j;
- const int x_941 = i;
- i = 0;
- i = x_941;
- const float3 x_526 = float3(x_525.x, x_525.z, x_525.z);
- const int x_942 = obj.numbers[x_30_save];
- obj.numbers[x_30_save] = 0;
- obj.numbers[x_30_save] = x_942;
- const int x_34_save = x_33;
- const int x_35 = obj.numbers[x_34_save];
- const QuicksortObject x_943 = obj;
- const int tint_symbol_4[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
- const QuicksortObject tint_symbol_5 = {tint_symbol_4};
- obj = tint_symbol_5;
- obj = x_943;
- const float2 x_527 = float2(x_526.x, x_526.x);
- const int x_36_save = x_32;
- const float3 x_528 = float3(x_524.x, x_524.z, x_524.x);
- obj.numbers[x_36_save] = x_35;
- const QuicksortObject x_944 = obj;
- const int tint_symbol_6[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
- const QuicksortObject tint_symbol_7 = {tint_symbol_6};
- obj = tint_symbol_7;
- obj = x_944;
- const float3 x_529 = float3(x_526.y, x_526.z, x_526.x);
- const int x_945 = i;
- i = 0;
- i = x_945;
- const int x_37 = j;
- const int x_946 = temp;
- temp = 0;
- temp = x_946;
- const float2 x_530 = float2(x_529.z, x_529.y);
- const int x_947 = obj.numbers[x_34_save];
- obj.numbers[x_34_save] = 0;
- obj.numbers[x_34_save] = x_947;
- const int x_38 = temp;
- const int x_948 = j;
- j = 0;
- j = x_948;
- const float3 x_531 = float3(x_527.x, x_526.y, x_526.x);
- const int x_949 = obj.numbers[x_36_save];
- obj.numbers[x_36_save] = 0;
- obj.numbers[x_36_save] = x_949;
- const QuicksortObject x_950 = obj;
- const int tint_symbol_8[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
- const QuicksortObject tint_symbol_9 = {tint_symbol_8};
- obj = tint_symbol_9;
- obj = x_950;
- const float3 x_532 = float3(x_528.x, x_528.y, x_528.x);
- const int x_951 = obj.numbers[x_34_save];
- obj.numbers[x_34_save] = 0;
- obj.numbers[x_34_save] = x_951;
- obj.numbers[x_37] = x_38;
- return;
-}
-
-int performPartition_i1_i1_(inout int l, inout int h) {
- int param_3 = 0;
- int i_1 = 0;
- int j_1 = 0;
- int param_2 = 0;
- int param_1 = 0;
- int param = 0;
- int pivot = 0;
- float2 x_537 = float2(0.0f, 0.0f);
- float3 x_538 = float3(0.0f, 0.0f, 0.0f);
- const int x_952 = h;
- h = 0;
- h = x_952;
- const int x_41 = h;
- const int x_953 = l;
- l = 0;
- l = x_953;
- const int x_42_save = x_41;
- const int x_954 = obj.numbers[x_42_save];
- obj.numbers[x_42_save] = 0;
- obj.numbers[x_42_save] = x_954;
- const int x_43 = obj.numbers[x_42_save];
- const int x_955 = param_3;
- param_3 = 0;
- param_3 = x_955;
- const float3 x_534 = float3(float3(1.0f, 2.0f, 3.0f).z, float3(1.0f, 2.0f, 3.0f).x, float3(1.0f, 2.0f, 3.0f).z);
- const int x_956 = param_1;
- param_1 = 0;
- param_1 = x_956;
- pivot = x_43;
- const int x_45 = l;
- const int x_957 = h;
- h = 0;
- h = x_957;
- const int x_958 = j_1;
- j_1 = 0;
- j_1 = x_958;
- const float3 x_535 = float3(x_534.y, x_534.z, x_534.y);
- const int x_959 = l;
- l = 0;
- l = x_959;
- i_1 = (x_45 - asint(1u));
- const int x_49 = l;
- const float3 x_536 = float3(x_534.x, x_534.z, x_535.x);
- j_1 = 10;
- const QuicksortObject x_960 = obj;
- const int tint_symbol_10[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
- const QuicksortObject tint_symbol_11 = {tint_symbol_10};
- obj = tint_symbol_11;
- obj = x_960;
- [loop] while (true) {
- const int x_961 = pivot;
- pivot = 0;
- pivot = x_961;
- const int x_962 = param_1;
- param_1 = 0;
- param_1 = x_962;
- const int x_55 = j_1;
- const int x_963 = pivot;
- pivot = 0;
- pivot = x_963;
- x_537 = float2(float3(1.0f, 2.0f, 3.0f).y, float3(1.0f, 2.0f, 3.0f).z);
- const QuicksortObject x_964 = obj;
- const int tint_symbol_12[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
- const QuicksortObject tint_symbol_13 = {tint_symbol_12};
- obj = tint_symbol_13;
- obj = x_964;
- const int x_56 = h;
- const int x_965 = h;
- h = 0;
- h = x_965;
- const int x_966 = param;
- param = 0;
- param = x_966;
- const int x_967 = j_1;
- j_1 = 0;
- j_1 = x_967;
- x_538 = float3(x_534.x, x_537.y, x_534.z);
- const int x_968 = param;
- param = 0;
- param = x_968;
- if ((x_55 <= (x_56 - asint(1u)))) {
- } else {
- break;
- }
- const int x_60 = j_1;
- const int x_969 = obj.numbers[x_42_save];
- obj.numbers[x_42_save] = 0;
- obj.numbers[x_42_save] = x_969;
- const int x_61_save = x_60;
- const int x_970 = h;
- h = 0;
- h = x_970;
- const float3 x_539 = float3(x_537.x, x_535.z, x_537.x);
- const int x_971 = param_1;
- param_1 = 0;
- param_1 = x_971;
- const int x_62 = obj.numbers[x_61_save];
- const QuicksortObject x_972 = obj;
- const int tint_symbol_14[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
- const QuicksortObject tint_symbol_15 = {tint_symbol_14};
- obj = tint_symbol_15;
- obj = x_972;
- const int x_63 = pivot;
- const float2 x_540 = float2(float3(1.0f, 2.0f, 3.0f).y, x_534.z);
- const int x_973 = i_1;
- i_1 = 0;
- i_1 = x_973;
- const int x_974 = l;
- l = 0;
- l = x_974;
- const float3 x_541 = float3(x_534.y, x_534.x, x_534.y);
- const int x_975 = pivot;
- pivot = 0;
- pivot = x_975;
- if ((x_62 <= x_63)) {
- const float3 x_542 = float3(x_541.z, x_541.x, x_541.x);
- const int x_976 = param_3;
- param_3 = 0;
- param_3 = x_976;
- const int x_67 = i_1;
- const int x_977 = pivot;
- pivot = 0;
- pivot = x_977;
- const float2 x_543 = float2(x_539.x, x_541.y);
- const int x_978 = i_1;
- i_1 = 0;
- i_1 = x_978;
- const int x_979 = param;
- param = 0;
- param = x_979;
- i_1 = (x_67 + asint(1u));
- const int x_980 = l;
- l = 0;
- l = x_980;
- const float3 x_544 = float3(float3(1.0f, 2.0f, 3.0f).z, float3(1.0f, 2.0f, 3.0f).y, x_540.x);
- const int x_70 = i_1;
- const float2 x_545 = float2(x_537.y, x_538.x);
- const int x_981 = param;
- param = 0;
- param = x_981;
- param = x_70;
- const int x_982 = param;
- param = 0;
- param = x_982;
- const float2 x_546 = float2(x_545.x, x_545.x);
- const int x_983 = i_1;
- i_1 = 0;
- i_1 = x_983;
- param_1 = j_1;
- const int x_984 = param_3;
- param_3 = 0;
- param_3 = x_984;
- swap_i1_i1_(param, param_1);
- const int x_985 = param_1;
- param_1 = 0;
- param_1 = x_985;
- }
- const QuicksortObject x_986 = obj;
- const int tint_symbol_16[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
- const QuicksortObject tint_symbol_17 = {tint_symbol_16};
- obj = tint_symbol_17;
- obj = x_986;
- {
- const int x_987 = h;
- h = 0;
- h = x_987;
- const int x_74 = j_1;
- const int x_988 = h;
- h = 0;
- h = x_988;
- const float3 x_547 = float3(x_539.x, x_541.z, x_541.z);
- const int x_989 = obj.numbers[x_61_save];
- obj.numbers[x_61_save] = 0;
- obj.numbers[x_61_save] = x_989;
- const int x_990 = param;
- param = 0;
- param = x_990;
- j_1 = (1 + x_74);
- const int x_991 = param_1;
- param_1 = 0;
- param_1 = x_991;
- const float3 x_548 = float3(x_541.y, x_541.z, x_541.x);
- const int x_992 = obj.numbers[x_61_save];
- obj.numbers[x_61_save] = 0;
- obj.numbers[x_61_save] = x_992;
- }
- }
- const int x_76 = i_1;
- const int x_993 = obj.numbers[x_42_save];
- obj.numbers[x_42_save] = 0;
- obj.numbers[x_42_save] = x_993;
- const float2 x_549 = float2(x_534.x, x_534.y);
- const QuicksortObject x_994 = obj;
- const int tint_symbol_18[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
- const QuicksortObject tint_symbol_19 = {tint_symbol_18};
- obj = tint_symbol_19;
- obj = x_994;
- const int x_995 = h;
- h = 0;
- h = x_995;
- i_1 = (1 + x_76);
- const int x_996 = param_1;
- param_1 = 0;
- param_1 = x_996;
- const int x_79 = i_1;
- const int x_997 = j_1;
- j_1 = 0;
- j_1 = x_997;
- const float2 x_550 = float2(x_534.x, x_534.x);
- const int x_998 = param_1;
- param_1 = 0;
- param_1 = x_998;
- param_2 = x_79;
- const float2 x_551 = float2(x_534.y, x_536.x);
- const int x_999 = pivot;
- pivot = 0;
- pivot = x_999;
- const int x_81 = h;
- const float2 x_552 = float2(x_550.x, x_549.y);
- const int x_1000 = h;
- h = 0;
- h = x_1000;
- param_3 = x_81;
- const int x_1001 = i_1;
- i_1 = 0;
- i_1 = x_1001;
- const float2 x_553 = float2(x_549.y, x_552.x);
- const int x_1002 = h;
- h = 0;
- h = x_1002;
- swap_i1_i1_(param_2, param_3);
- const int x_1003 = l;
- l = 0;
- l = x_1003;
- const float2 x_554 = float2(x_536.z, float3(1.0f, 2.0f, 3.0f).y);
- const int x_1004 = param_1;
- param_1 = 0;
- param_1 = x_1004;
- const int x_83 = i_1;
- const int x_1005 = param;
- param = 0;
- param = x_1005;
- const float2 x_555 = float2(x_534.y, x_534.x);
- const int x_1006 = j_1;
- j_1 = 0;
- j_1 = x_1006;
- return x_83;
-}
-
-void quicksort_() {
- int param_4 = 0;
- int h_1 = 0;
- int p = 0;
- int l_1 = 0;
- int top = 0;
- int stack[10] = (int[10])0;
- int param_5 = 0;
- l_1 = 0;
- const int x_1007 = param_5;
- param_5 = 0;
- param_5 = x_1007;
- h_1 = 9;
- const int x_1008[10] = stack;
- const int tint_symbol_20[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
- stack = tint_symbol_20;
- stack = x_1008;
- const float2 x_556 = float2(float3(1.0f, 2.0f, 3.0f).y, float3(1.0f, 2.0f, 3.0f).y);
- const int x_1009 = param_5;
- param_5 = 0;
- param_5 = x_1009;
- top = -1;
- const int x_1010 = p;
- p = 0;
- p = x_1010;
- const int x_93 = top;
- const float2 x_557 = float2(float3(1.0f, 2.0f, 3.0f).x, float3(1.0f, 2.0f, 3.0f).x);
- const int x_1011 = p;
- p = 0;
- p = x_1011;
- const int x_94 = (x_93 + asint(1u));
- const int x_1012 = top;
- top = 0;
- top = x_1012;
- const float2 x_558 = float2(x_556.y, x_557.y);
- const int x_1013 = param_4;
- param_4 = 0;
- param_4 = x_1013;
- top = x_94;
- const int x_1014 = h_1;
- h_1 = 0;
- h_1 = x_1014;
- const float3 x_559 = float3(x_557.y, x_557.x, x_557.x);
- const int x_1015 = param_4;
- param_4 = 0;
- param_4 = x_1015;
- const int x_95 = l_1;
- const QuicksortObject x_1016 = obj;
- const int tint_symbol_21[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
- const QuicksortObject tint_symbol_22 = {tint_symbol_21};
- obj = tint_symbol_22;
- obj = x_1016;
- const float3 x_560 = float3(x_559.y, x_559.x, x_557.x);
- const int x_96_save = x_94;
- const int x_1017[10] = stack;
- const int tint_symbol_23[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
- stack = tint_symbol_23;
- stack = x_1017;
- const float3 x_561 = float3(x_556.y, x_556.y, x_556.y);
- const int x_1018 = l_1;
- l_1 = 0;
- l_1 = 0;
- stack[x_96_save] = x_95;
- const int x_1019 = param_5;
- param_5 = 0;
- param_5 = x_1019;
- const int x_97 = top;
- const int x_1020 = param_4;
- param_4 = 0;
- param_4 = x_1020;
- const float3 x_562 = float3(float3(1.0f, 2.0f, 3.0f).z, x_558.y, float3(1.0f, 2.0f, 3.0f).y);
- const int x_1021 = stack[x_96_save];
- stack[x_96_save] = 0;
- stack[x_96_save] = x_1021;
- const int x_98 = (x_97 + 1);
- const int x_1022 = stack[x_96_save];
- stack[x_96_save] = 0;
- stack[x_96_save] = x_1022;
- const float3 x_563 = float3(x_559.x, x_559.z, x_556.y);
- top = x_98;
- const int x_1023 = param_4;
- param_4 = 0;
- param_4 = x_1023;
- const int x_99 = h_1;
- const int x_1024 = param_4;
- param_4 = 0;
- param_4 = x_1024;
- const float3 x_564 = float3(x_558.x, x_561.x, x_558.y);
- const int x_1025 = l_1;
- l_1 = 0;
- l_1 = x_1025;
- const int x_100_save = x_98;
- const int x_1026 = param_5;
- param_5 = 0;
- param_5 = x_1026;
- const float2 x_565 = float2(x_564.z, x_564.z);
- const int x_1027 = p;
- p = 0;
- p = x_1027;
- stack[x_100_save] = x_99;
- [loop] while (true) {
- const float3 x_566 = float3(x_563.x, x_563.x, x_563.x);
- const int x_1028 = h_1;
- h_1 = 0;
- h_1 = x_1028;
- const int x_1029[10] = stack;
- const int tint_symbol_24[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
- stack = tint_symbol_24;
- stack = x_1029;
- const int x_106 = top;
- const int x_1030[10] = stack;
- const int tint_symbol_25[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
- stack = tint_symbol_25;
- stack = x_1030;
- const float2 x_567 = float2(x_558.x, x_564.z);
- const int x_1031 = param_4;
- param_4 = 0;
- param_4 = x_1031;
- if ((x_106 >= asint(0u))) {
- } else {
- break;
- }
- const QuicksortObject x_1032 = obj;
- const int tint_symbol_26[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
- const QuicksortObject tint_symbol_27 = {tint_symbol_26};
- obj = tint_symbol_27;
- obj = x_1032;
- const float3 x_568 = float3(x_559.y, x_559.x, x_563.y);
- const int x_1033 = param_4;
- param_4 = 0;
- param_4 = x_1033;
- const int x_108 = top;
- const float3 x_569 = float3(x_565.x, x_567.y, x_565.x);
- const int x_1034 = h_1;
- h_1 = 0;
- h_1 = x_1034;
- const float2 x_570 = float2(x_556.x, x_556.x);
- const int x_1035 = p;
- p = 0;
- p = x_1035;
- top = (x_108 - asint(1u));
- const int x_1036 = p;
- p = 0;
- p = x_1036;
- const int x_110_save = x_108;
- const int x_1037 = stack[x_96_save];
- stack[x_96_save] = 0;
- stack[x_96_save] = x_1037;
- const int x_111 = stack[x_110_save];
- const int x_1038[10] = stack;
- const int tint_symbol_28[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
- stack = tint_symbol_28;
- stack = x_1038;
- const float3 x_571 = float3(x_559.y, x_559.x, x_564.y);
- const int x_1039 = l_1;
- l_1 = 0;
- l_1 = x_1039;
- h_1 = x_111;
- const int x_1040[10] = stack;
- const int tint_symbol_29[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
- stack = tint_symbol_29;
- stack = x_1040;
- const float2 x_572 = float2(x_562.y, x_561.y);
- const int x_1041 = p;
- p = 0;
- p = x_1041;
- const int x_112 = top;
- const int x_1042 = param_4;
- param_4 = 0;
- param_4 = x_1042;
- const int x_1043 = stack[x_100_save];
- stack[x_100_save] = 0;
- stack[x_100_save] = x_1043;
- const float2 x_573 = float2(float3(1.0f, 2.0f, 3.0f).y, float3(1.0f, 2.0f, 3.0f).z);
- top = (x_112 - 1);
- const int x_1044 = param_5;
- param_5 = 0;
- param_5 = x_1044;
- const float3 x_574 = float3(x_570.y, x_565.x, x_570.y);
- const int x_1045 = h_1;
- h_1 = 0;
- h_1 = x_1045;
- const int x_114_save = x_112;
- const float2 x_575 = float2(x_564.y, x_564.z);
- const int x_1046 = stack[x_100_save];
- stack[x_100_save] = 0;
- stack[x_100_save] = x_1046;
- const int x_115 = stack[x_114_save];
- const int x_1047 = p;
- p = 0;
- p = x_1047;
- const float3 x_576 = float3(x_573.y, x_573.y, x_565.x);
- const int x_1048 = param_5;
- param_5 = 0;
- param_5 = x_1048;
- l_1 = x_115;
- const int x_1049 = top;
- top = 0;
- top = x_1049;
- param_4 = l_1;
- const int x_1050 = stack[x_110_save];
- stack[x_110_save] = 0;
- stack[x_110_save] = x_1050;
- const float2 x_577 = float2(x_569.y, x_569.z);
- const int x_120 = h_1;
- const float2 x_578 = float2(x_558.x, float3(1.0f, 2.0f, 3.0f).y);
- param_5 = x_120;
- const int x_1051 = stack[x_100_save];
- stack[x_100_save] = 0;
- stack[x_100_save] = x_1051;
- const int x_121 = performPartition_i1_i1_(param_4, param_5);
- const float2 x_579 = float2(x_567.x, x_568.x);
- const int x_1052 = param_5;
- param_5 = 0;
- param_5 = x_1052;
- p = x_121;
- const int x_1053 = param_4;
- param_4 = 0;
- param_4 = x_1053;
- const int x_122 = p;
- const int x_1054 = h_1;
- h_1 = 0;
- h_1 = x_1054;
- const float2 x_580 = float2(x_568.y, x_568.y);
- const int x_1055 = l_1;
- l_1 = 0;
- l_1 = x_1055;
- const int x_1056 = h_1;
- h_1 = 0;
- h_1 = x_1056;
- const int x_124 = l_1;
- const int x_1057 = stack[x_110_save];
- stack[x_110_save] = 0;
- stack[x_110_save] = x_1057;
- const int x_1058 = h_1;
- h_1 = 0;
- h_1 = x_1058;
- const float2 x_582 = float2(x_567.y, x_573.x);
- const int x_1059 = stack[x_100_save];
- stack[x_100_save] = 0;
- stack[x_100_save] = x_1059;
- if (((x_122 - asint(1u)) > x_124)) {
- const int x_1060 = param_4;
- param_4 = 0;
- param_4 = x_1060;
- const int x_128 = top;
- const float2 x_583 = float2(x_571.y, x_556.y);
- const int x_1061 = stack[x_100_save];
- stack[x_100_save] = 0;
- stack[x_100_save] = x_1061;
- const int x_1062[10] = stack;
- const int tint_symbol_30[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
- stack = tint_symbol_30;
- stack = x_1062;
- const float2 x_584 = float2(x_569.z, x_569.y);
- const float3 x_585 = float3(x_580.y, x_577.x, x_577.x);
- const int x_130 = l_1;
- const int x_1063 = stack[x_114_save];
- stack[x_114_save] = 0;
- stack[x_114_save] = x_1063;
- const float2 x_586 = float2(x_564.x, x_585.x);
- const int x_1064 = param_5;
- param_5 = 0;
- param_5 = x_1064;
- const int x_131_save = (1 + x_128);
- const int x_1065 = stack[x_110_save];
- stack[x_110_save] = 0;
- stack[x_110_save] = x_1065;
- const float3 x_587 = float3(x_566.y, x_566.y, x_563.x);
- const int x_1066 = param_5;
- param_5 = 0;
- param_5 = x_1066;
- stack[x_131_save] = x_130;
- const int x_132 = top;
- const int x_1067 = stack[x_100_save];
- stack[x_100_save] = 0;
- stack[x_100_save] = x_1067;
- const float2 x_588 = float2(x_575.y, x_575.x);
- const int x_1068 = stack[x_131_save];
- stack[x_131_save] = 0;
- stack[x_131_save] = x_1068;
- const int x_133 = asint((1u + asuint(x_132)));
- const int x_1069 = stack[x_100_save];
- stack[x_100_save] = 0;
- stack[x_100_save] = x_1069;
- const float3 x_589 = float3(x_576.z, x_588.y, x_576.z);
- const int x_1070 = h_1;
- h_1 = 0;
- h_1 = x_1070;
- top = x_133;
- const int x_1071[10] = stack;
- const int tint_symbol_31[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
- stack = tint_symbol_31;
- stack = x_1071;
- const int x_134 = p;
- const float2 x_590 = float2(x_576.x, x_573.y);
- const int x_1072 = stack[x_114_save];
- stack[x_114_save] = 0;
- stack[x_114_save] = x_1072;
- const int x_136_save = x_133;
- const int x_1073 = stack[x_114_save];
- stack[x_114_save] = 0;
- stack[x_114_save] = x_1073;
- stack[x_136_save] = (x_134 - asint(1u));
- const int x_1074 = stack[x_96_save];
- stack[x_96_save] = 0;
- stack[x_96_save] = x_1074;
- const float2 x_591 = float2(x_569.z, x_569.y);
- const int x_1075 = stack[x_136_save];
- stack[x_136_save] = 0;
- stack[x_136_save] = x_1075;
- }
- const int x_1076 = stack[x_96_save];
- stack[x_96_save] = 0;
- stack[x_96_save] = x_1076;
- const float2 x_592 = float2(float3(1.0f, 2.0f, 3.0f).x, float3(1.0f, 2.0f, 3.0f).y);
- const QuicksortObject x_1077 = obj;
- const int tint_symbol_32[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
- const QuicksortObject tint_symbol_33 = {tint_symbol_32};
- obj = tint_symbol_33;
- obj = x_1077;
- const int x_137 = p;
- const int x_1078 = stack[x_114_save];
- stack[x_114_save] = 0;
- stack[x_114_save] = x_1078;
- const float3 x_593 = float3(x_571.z, x_556.x, x_556.y);
- const int x_1079 = p;
- p = 0;
- p = x_1079;
- const float3 x_594 = float3(x_563.z, x_563.x, x_575.x);
- const int x_1080 = stack[x_114_save];
- stack[x_114_save] = 0;
- stack[x_114_save] = x_1080;
- const int x_139 = h_1;
- const int x_1081 = top;
- top = 0;
- top = x_1081;
- const float3 x_595 = float3(x_560.z, x_568.x, x_560.x);
- const int x_1082 = stack[x_100_save];
- stack[x_100_save] = 0;
- stack[x_100_save] = x_1082;
- const int x_1083 = p;
- p = 0;
- p = x_1083;
- if ((asint((1u + asuint(x_137))) < x_139)) {
- const int x_1084 = stack[x_114_save];
- stack[x_114_save] = 0;
- stack[x_114_save] = x_1084;
- const float2 x_596 = float2(x_592.y, x_582.x);
- const int x_1085 = l_1;
- l_1 = 0;
- l_1 = x_1085;
- const int x_143 = top;
- const int x_1086 = stack[x_114_save];
- stack[x_114_save] = 0;
- stack[x_114_save] = x_1086;
- const float3 x_597 = float3(x_562.y, x_560.y, x_560.y);
- const int x_144 = (x_143 + 1);
- const int x_1087 = param_5;
- param_5 = 0;
- param_5 = x_1087;
- top = x_144;
- const int x_1088 = stack[x_114_save];
- stack[x_114_save] = 0;
- stack[x_114_save] = x_1088;
- const int x_145 = p;
- const int x_1089 = param_5;
- param_5 = 0;
- param_5 = x_1089;
- const float3 x_599 = float3(x_560.z, x_560.x, x_568.x);
- const int x_1090 = p;
- p = 0;
- p = x_1090;
- const float3 x_600 = float3(x_556.x, x_580.x, x_580.x);
- const int x_1091 = stack[x_100_save];
- stack[x_100_save] = 0;
- stack[x_100_save] = x_1091;
- const int x_147_save = x_144;
- const int x_1092 = stack[x_110_save];
- stack[x_110_save] = 0;
- stack[x_110_save] = x_1092;
- const float2 x_601 = float2(x_563.x, x_563.y);
- stack[x_147_save] = asint((1u + asuint(x_145)));
- const int x_1093[10] = stack;
- const int tint_symbol_34[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
- stack = tint_symbol_34;
- stack = x_1093;
- const int x_148 = top;
- const int x_1094 = stack[x_114_save];
- stack[x_114_save] = 0;
- stack[x_114_save] = x_1094;
- const float2 x_602 = float2(x_565.y, x_599.y);
- const int x_1095[10] = stack;
- const int tint_symbol_35[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
- stack = tint_symbol_35;
- stack = x_1095;
- const int x_149 = (x_148 + asint(1u));
- const int x_1096 = stack[x_147_save];
- stack[x_147_save] = 0;
- stack[x_147_save] = x_1096;
- top = x_149;
- const int x_1097 = param_4;
- param_4 = 0;
- param_4 = x_1097;
- const int x_150 = h_1;
- const int x_1098 = stack[x_100_save];
- stack[x_100_save] = 0;
- stack[x_100_save] = x_1098;
- const int x_1099 = stack[x_96_save];
- stack[x_96_save] = 0;
- stack[x_96_save] = x_1099;
- stack[x_149] = x_150;
- const int x_1100 = stack[x_114_save];
- stack[x_114_save] = 0;
- stack[x_114_save] = x_1100;
- const float3 x_603 = float3(x_568.y, x_564.x, x_564.x);
- const int x_1101 = l_1;
- l_1 = 0;
- l_1 = x_1101;
- }
- const int x_1102 = stack[x_100_save];
- stack[x_100_save] = 0;
- stack[x_100_save] = x_1102;
- {
- const int x_1103 = l_1;
- l_1 = 0;
- l_1 = x_1103;
- const float2 x_604 = float2(x_563.z, x_564.x);
- const QuicksortObject x_1104 = obj;
- const int tint_symbol_36[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
- const QuicksortObject tint_symbol_37 = {tint_symbol_36};
- obj = tint_symbol_37;
- obj = x_1104;
- }
- }
- const int x_1105 = h_1;
- h_1 = 0;
- h_1 = x_1105;
- return;
-}
-
-void main_1() {
- float3 color = float3(0.0f, 0.0f, 0.0f);
- int i_2 = 0;
- float2 uv = float2(0.0f, 0.0f);
- const float2 x_717 = uv;
- uv = float2(0.0f, 0.0f);
- uv = x_717;
- i_2 = 0;
- const QuicksortObject x_721 = obj;
- const int tint_symbol_38[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
- const QuicksortObject tint_symbol_39 = {tint_symbol_38};
- obj = tint_symbol_39;
- obj = x_721;
- if (true) {
- const QuicksortObject x_722 = obj;
- const int tint_symbol_40[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
- const QuicksortObject tint_symbol_41 = {tint_symbol_40};
- obj = tint_symbol_41;
- obj = x_722;
- const float2 x_431 = float2(float3(1.0f, 2.0f, 3.0f).x, float3(1.0f, 2.0f, 3.0f).x);
- const int x_158 = i_2;
- const float2 x_723 = uv;
- uv = float2(0.0f, 0.0f);
- uv = x_723;
- const float3 x_725 = color;
- color = float3(0.0f, 0.0f, 0.0f);
- color = x_725;
- const float2 x_432 = float2(x_431.y, x_431.y);
- const QuicksortObject x_726 = obj;
- const int tint_symbol_42[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
- const QuicksortObject tint_symbol_43 = {tint_symbol_42};
- obj = tint_symbol_43;
- obj = x_726;
- }
- const QuicksortObject x_756 = obj;
- const int tint_symbol_44[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
- const QuicksortObject tint_symbol_45 = {tint_symbol_44};
- obj = tint_symbol_45;
- obj = x_756;
- const float2 x_446 = float2(float2(0.0f, 0.0f).x, float2(0.0f, 0.0f).x);
- const int x_757 = i_2;
- i_2 = 0;
- i_2 = x_757;
- quicksort_();
- const QuicksortObject x_758 = obj;
- const int tint_symbol_46[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
- const QuicksortObject tint_symbol_47 = {tint_symbol_46};
- obj = tint_symbol_47;
- obj = x_758;
- const float4 x_184 = gl_FragCoord;
- const float2 x_759 = uv;
- uv = float2(0.0f, 0.0f);
- uv = x_759;
- const float2 x_447 = float2(float2(0.0f, 0.0f).y, float2(0.0f, 0.0f).y);
- const float2 x_760 = uv;
- uv = float2(0.0f, 0.0f);
- uv = x_760;
- const float2 x_185 = float2(x_184.x, x_184.y);
- const float3 x_448 = float3(x_185.y, x_446.y, x_446.y);
- const QuicksortObject x_761 = obj;
- const int tint_symbol_48[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
- const QuicksortObject tint_symbol_49 = {tint_symbol_48};
- obj = tint_symbol_49;
- obj = x_761;
- const float2 x_762 = uv;
- uv = float2(0.0f, 0.0f);
- uv = x_762;
- const float2 x_191 = asfloat(x_188[0].xy);
- const QuicksortObject x_763 = obj;
- const int tint_symbol_50[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
- const QuicksortObject tint_symbol_51 = {tint_symbol_50};
- obj = tint_symbol_51;
- obj = x_763;
- const float3 x_449 = float3(x_184.y, float3(1.0f, 2.0f, 3.0f).z, x_184.w);
- const float3 x_764 = color;
- color = float3(0.0f, 0.0f, 0.0f);
- color = x_764;
- const float2 x_192 = (x_185 / x_191);
- const QuicksortObject x_765 = obj;
- const int tint_symbol_52[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
- const QuicksortObject tint_symbol_53 = {tint_symbol_52};
- obj = tint_symbol_53;
- obj = x_765;
- const float2 x_450 = float2(x_447.x, x_185.y);
- const float3 x_766 = color;
- color = float3(0.0f, 0.0f, 0.0f);
- const float3 x_767 = color;
- color = float3(0.0f, 0.0f, 0.0f);
- color = x_767;
- color = x_766;
- uv = x_192;
- color = float3(1.0f, 2.0f, 3.0f);
- const float3 x_768 = color;
- color = float3(0.0f, 0.0f, 0.0f);
- color = x_768;
- const float3 x_451 = float3(x_185.x, x_185.y, x_446.y);
- const QuicksortObject x_769 = obj;
- const int tint_symbol_54[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
- const QuicksortObject tint_symbol_55 = {tint_symbol_54};
- obj = tint_symbol_55;
- obj = x_769;
- const int x_770 = obj.numbers[0u];
- obj.numbers[0u] = 0;
- obj.numbers[0u] = x_770;
- const int x_201 = obj.numbers[0u];
- const QuicksortObject x_771 = obj;
- const int tint_symbol_56[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
- const QuicksortObject tint_symbol_57 = {tint_symbol_56};
- obj = tint_symbol_57;
- obj = x_771;
- const int x_772 = obj.numbers[0u];
- obj.numbers[0u] = 0;
- obj.numbers[0u] = x_772;
- const float x_206 = color.x;
- const float x_773 = color.x;
- color.x = 0.0f;
- color.x = x_773;
- const float2 x_452 = float2(float3(1.0f, 2.0f, 3.0f).z, float3(1.0f, 2.0f, 3.0f).y);
- const int x_774 = i_2;
- i_2 = 0;
- i_2 = x_774;
- const QuicksortObject x_775 = obj;
- const int tint_symbol_58[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
- const QuicksortObject tint_symbol_59 = {tint_symbol_58};
- obj = tint_symbol_59;
- obj = x_775;
- const float3 x_453 = float3(x_451.x, x_450.x, x_450.y);
- color.x = (x_206 + float(x_201));
- const float2 x_776 = uv;
- uv = float2(0.0f, 0.0f);
- uv = x_776;
- const float2 x_777 = uv;
- uv = float2(0.0f, 0.0f);
- uv = x_777;
- const float2 x_454 = float2(x_184.y, x_184.y);
- const float x_210 = uv.x;
- const float2 x_455 = float2(x_192.y, x_192.x);
- const float x_778 = uv.x;
- uv.x = 0.0f;
- uv.x = x_778;
- const QuicksortObject x_779 = obj;
- const int tint_symbol_60[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
- const QuicksortObject tint_symbol_61 = {tint_symbol_60};
- obj = tint_symbol_61;
- obj = x_779;
- if ((x_210 > 0.25f)) {
- const int x_780 = i_2;
- i_2 = 0;
- i_2 = x_780;
- const int x_781 = obj.numbers[0u];
- obj.numbers[0u] = 0;
- obj.numbers[0u] = x_781;
- const float3 x_456 = float3(float2(0.0f, 0.0f).y, x_448.y, x_448.y);
- const float x_782 = uv.x;
- uv.x = 0.0f;
- uv.x = x_782;
- const int x_216 = obj.numbers[1];
- const QuicksortObject x_783 = obj;
- const int tint_symbol_62[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
- const QuicksortObject tint_symbol_63 = {tint_symbol_62};
- obj = tint_symbol_63;
- obj = x_783;
- const float2 x_457 = float2(x_454.x, x_454.x);
- const float2 x_784 = uv;
- uv = float2(0.0f, 0.0f);
- uv = x_784;
- const QuicksortObject x_785 = obj;
- const int tint_symbol_64[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
- const QuicksortObject tint_symbol_65 = {tint_symbol_64};
- obj = tint_symbol_65;
- obj = x_785;
- const float2 x_458 = float2(float3(1.0f, 2.0f, 3.0f).z, float2(0.0f, 0.0f).y);
- const int x_786 = i_2;
- i_2 = 0;
- i_2 = x_786;
- const float x_219 = color[0];
- const float x_787 = color[0];
- color[0] = 0.0f;
- color[0] = x_787;
- const float3 x_788 = color;
- color = float3(0.0f, 0.0f, 0.0f);
- color = x_788;
- const float3 x_789 = color;
- color = float3(0.0f, 0.0f, 0.0f);
- color = x_789;
- const float3 x_459 = float3(x_454.y, x_454.y, x_447.y);
- const float x_790 = color[0];
- color[0] = 0.0f;
- color[0] = x_790;
- color.x = (float(x_216) + x_219);
- const int x_791 = obj.numbers[0u];
- obj.numbers[0u] = 0;
- obj.numbers[0u] = x_791;
- }
- const float x_792 = uv.x;
- uv.x = 0.0f;
- uv.x = x_792;
- const float x_793 = uv.x;
- uv.x = 0.0f;
- uv.x = x_793;
- const float x_223 = uv.x;
- const float x_794 = uv.x;
- uv.x = 0.0f;
- uv.x = x_794;
- const float3 x_460 = float3(x_453.z, x_453.y, x_453.y);
- const float2 x_795 = uv;
- uv = float2(0.0f, 0.0f);
- uv = x_795;
- const float x_796 = uv.x;
- uv.x = 0.0f;
- uv.x = x_796;
- const float2 x_461 = float2(float2(0.0f, 0.0f).y, float2(0.0f, 0.0f).y);
- const float x_797 = uv.x;
- uv.x = 0.0f;
- uv.x = x_797;
- if ((x_223 > 0.5f)) {
- const float x_798 = uv.x;
- uv.x = 0.0f;
- uv.x = x_798;
- const float2 x_462 = float2(x_446.x, x_446.x);
- const float x_799 = color.x;
- color.x = 0.0f;
- color.x = x_799;
- const float x_800 = color.x;
- color.x = 0.0f;
- color.x = x_800;
- const float3 x_463 = float3(x_453.x, x_453.z, x_461.y);
- const float x_801 = color.x;
- color.x = 0.0f;
- color.x = x_801;
- const int x_230 = obj.numbers[2u];
- const float x_802 = uv.x;
- uv.x = 0.0f;
- uv.x = x_802;
- const float x_803 = color.x;
- color.x = 0.0f;
- color.x = x_803;
- const int x_804 = obj.numbers[2u];
- obj.numbers[2u] = 0;
- obj.numbers[2u] = x_804;
- const float2 x_464 = float2(x_450.y, x_191.x);
- const float x_805 = color.y;
- color.y = 0.0f;
- color.y = x_805;
- const float x_234 = color.y;
- const int x_806 = obj.numbers[2u];
- obj.numbers[2u] = 0;
- obj.numbers[2u] = x_806;
- const float2 x_465 = float2(x_463.x, x_185.x);
- const float x_807 = color.x;
- color.x = 0.0f;
- color.x = x_807;
- const int x_808 = i_2;
- i_2 = 0;
- i_2 = x_808;
- const float2 x_466 = float2(x_455.y, float2(0.0f, 0.0f).y);
- const int x_809 = i_2;
- i_2 = 0;
- i_2 = x_809;
- color.y = (float(x_230) + x_234);
- const float x_810 = uv.x;
- uv.x = 0.0f;
- uv.x = x_810;
- }
- const int x_811 = i_2;
- i_2 = 0;
- i_2 = x_811;
- const float2 x_467 = float2(x_191.x, x_191.x);
- const float x_812 = uv.x;
- uv.x = 0.0f;
- uv.x = x_812;
- const float x_238 = uv[0];
- const float3 x_813 = color;
- color = float3(0.0f, 0.0f, 0.0f);
- color = x_813;
- const float x_814 = color.x;
- color.x = 0.0f;
- color.x = x_814;
- if ((x_238 > 0.75f)) {
- const float x_815 = color.x;
- color.x = 0.0f;
- color.x = x_815;
- const int x_245 = obj.numbers[3];
- const float x_816 = color.x;
- color.x = 0.0f;
- color.x = x_816;
- const QuicksortObject x_817 = obj;
- const int tint_symbol_66[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
- const QuicksortObject tint_symbol_67 = {tint_symbol_66};
- obj = tint_symbol_67;
- obj = x_817;
- const float3 x_468 = float3(x_467.x, x_467.x, x_467.x);
- const float x_818 = uv[0];
- uv[0] = 0.0f;
- uv[0] = x_818;
- const float x_819 = uv.x;
- uv.x = 0.0f;
- uv.x = x_819;
- const float x_249 = color.z;
- const float3 x_820 = color;
- color = float3(0.0f, 0.0f, 0.0f);
- color = x_820;
- const float3 x_469 = float3(x_467.x, x_191.y, x_467.y);
- const float x_821 = color.z;
- color.z = 0.0f;
- color.z = x_821;
- const int x_822 = obj.numbers[0u];
- obj.numbers[0u] = 0;
- obj.numbers[0u] = x_822;
- const float2 x_470 = float2(float2(0.0f, 0.0f).x, float2(0.0f, 0.0f).y);
- const float x_823 = color.z;
- color.z = 0.0f;
- color.z = x_823;
- color.z = (x_249 + float(x_245));
- const float2 x_824 = uv;
- uv = float2(0.0f, 0.0f);
- uv = x_824;
- const float2 x_471 = float2(x_470.y, x_470.y);
- }
- const float x_825 = uv[0];
- uv[0] = 0.0f;
- uv[0] = x_825;
- const float3 x_472 = float3(x_454.x, x_454.y, x_454.y);
- const int x_254 = obj.numbers[4];
- const float x_826 = uv[0];
- uv[0] = 0.0f;
- uv[0] = x_826;
- const float3 x_827 = color;
- color = float3(0.0f, 0.0f, 0.0f);
- color = x_827;
- const float3 x_473 = float3(x_446.y, x_453.x, x_453.x);
- const int x_828 = obj.numbers[4];
- obj.numbers[4] = 0;
- obj.numbers[4] = x_828;
- const float2 x_474 = float2(x_191.x, x_184.z);
- const float x_829 = uv.x;
- uv.x = 0.0f;
- uv.x = x_829;
- const float x_257 = color.y;
- const float x_830 = color.y;
- color.y = 0.0f;
- color.y = x_830;
- const float2 x_475 = float2(x_467.x, x_450.x);
- const float x_831 = uv.x;
- uv.x = 0.0f;
- uv.x = x_831;
- const float x_832 = color.x;
- color.x = 0.0f;
- color.x = x_832;
- const float2 x_476 = float2(x_451.z, x_460.y);
- color.y = (x_257 + float(x_254));
- const float3 x_477 = float3(float2(0.0f, 0.0f).x, x_472.x, float2(0.0f, 0.0f).y);
- const float x_833 = uv.x;
- uv.x = 0.0f;
- uv.x = x_833;
- const float x_834 = color.x;
- color.x = 0.0f;
- color.x = x_834;
- const float2 x_478 = float2(x_472.x, x_472.y);
- const float x_835 = uv.y;
- uv.y = 0.0f;
- uv.y = x_835;
- const float x_261 = uv.y;
- const int x_836 = i_2;
- i_2 = 0;
- i_2 = x_836;
- const float3 x_479 = float3(float2(0.0f, 0.0f).y, x_454.y, float2(0.0f, 0.0f).x);
- const int x_837 = obj.numbers[0u];
- obj.numbers[0u] = 0;
- obj.numbers[0u] = x_837;
- const float x_838 = color.y;
- color.y = 0.0f;
- color.y = x_838;
- const float3 x_480 = float3(x_446.x, x_446.x, float2(0.0f, 0.0f).y);
- const float x_839 = uv.x;
- uv.x = 0.0f;
- uv.x = x_839;
- if ((x_261 > 0.25f)) {
- const float2 x_481 = float2(x_447.x, x_480.z);
- const float3 x_840 = color;
- color = float3(0.0f, 0.0f, 0.0f);
- color = x_840;
- const int x_267 = obj.numbers[5u];
- const float x_841 = color.x;
- color.x = 0.0f;
- color.x = x_841;
- const int x_842 = i_2;
- i_2 = 0;
- i_2 = x_842;
- const int x_843 = i_2;
- i_2 = 0;
- i_2 = x_843;
- const float x_270 = color.x;
- const float x_844 = uv[0];
- uv[0] = 0.0f;
- uv[0] = x_844;
- const float3 x_482 = float3(x_455.x, x_475.y, x_455.y);
- const QuicksortObject x_845 = obj;
- const int tint_symbol_68[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
- const QuicksortObject tint_symbol_69 = {tint_symbol_68};
- obj = tint_symbol_69;
- obj = x_845;
- const float x_846 = uv.y;
- uv.y = 0.0f;
- uv.y = x_846;
- const int x_847 = i_2;
- i_2 = 0;
- i_2 = x_847;
- const float3 x_483 = float3(x_184.w, x_184.w, x_192.x);
- const float x_848 = uv.x;
- uv.x = 0.0f;
- uv.x = x_848;
- color.x = (float(x_267) + x_270);
- const float3 x_484 = float3(x_454.y, x_450.x, x_454.y);
- const float x_849 = uv.x;
- uv.x = 0.0f;
- uv.x = x_849;
- }
- const float x_850 = color.x;
- color.x = 0.0f;
- color.x = x_850;
- const float3 x_485 = float3(x_467.x, x_450.y, x_450.x);
- const float x_851 = uv.y;
- uv.y = 0.0f;
- uv.y = x_851;
- const int x_852 = obj.numbers[4];
- obj.numbers[4] = 0;
- obj.numbers[4] = x_852;
- const float x_274 = uv.y;
- const int x_853 = obj.numbers[0u];
- obj.numbers[0u] = 0;
- obj.numbers[0u] = x_853;
- if ((x_274 > 0.5f)) {
- const float x_854 = uv.x;
- uv.x = 0.0f;
- uv.x = x_854;
- const float2 x_486 = float2(x_480.y, x_455.y);
- const float x_855 = color.y;
- color.y = 0.0f;
- color.y = x_855;
- const float2 x_487 = float2(x_449.z, x_449.y);
- const float x_856 = uv.y;
- uv.y = 0.0f;
- uv.y = x_856;
- const int x_280 = obj.numbers[6u];
- const float x_857 = uv.y;
- uv.y = 0.0f;
- uv.y = x_857;
- const int x_858 = i_2;
- i_2 = 0;
- i_2 = x_858;
- const int x_859 = obj.numbers[4];
- obj.numbers[4] = 0;
- obj.numbers[4] = x_859;
- const float2 x_488 = float2(x_473.z, x_473.y);
- const float x_283 = color.y;
- const float2 x_860 = uv;
- uv = float2(0.0f, 0.0f);
- uv = x_860;
- const float x_861 = color.x;
- color.x = 0.0f;
- color.x = x_861;
- const float2 x_489 = float2(x_475.y, x_475.x);
- const int x_862 = obj.numbers[6u];
- obj.numbers[6u] = 0;
- obj.numbers[6u] = x_862;
- const int x_863 = obj.numbers[6u];
- obj.numbers[6u] = 0;
- obj.numbers[6u] = x_863;
- const float2 x_490 = float2(x_480.z, x_480.z);
- const QuicksortObject x_864 = obj;
- const int tint_symbol_70[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
- const QuicksortObject tint_symbol_71 = {tint_symbol_70};
- obj = tint_symbol_71;
- obj = x_864;
- color.y = (float(x_280) + x_283);
- const float x_865 = color.x;
- color.x = 0.0f;
- color.x = x_865;
- const float2 x_491 = float2(float3(1.0f, 2.0f, 3.0f).y, x_454.x);
- const float x_866 = color.y;
- color.y = 0.0f;
- color.y = x_866;
- }
- const float2 x_492 = float2(x_455.y, x_455.y);
- const float x_867 = color.x;
- color.x = 0.0f;
- color.x = x_867;
- const float x_287 = uv.y;
- const QuicksortObject x_868 = obj;
- const int tint_symbol_72[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
- const QuicksortObject tint_symbol_73 = {tint_symbol_72};
- obj = tint_symbol_73;
- obj = x_868;
- const float2 x_493 = float2(x_475.x, x_475.y);
- const float x_869 = uv[0];
- uv[0] = 0.0f;
- uv[0] = x_869;
- const float x_870 = color.y;
- color.y = 0.0f;
- color.y = x_870;
- const float3 x_494 = float3(x_191.x, x_191.y, x_191.y);
- const int x_871 = obj.numbers[4];
- obj.numbers[4] = 0;
- obj.numbers[4] = x_871;
- if ((x_287 > 0.75f)) {
- const float3 x_872 = color;
- color = float3(0.0f, 0.0f, 0.0f);
- color = x_872;
- const float x_873 = color.x;
- color.x = 0.0f;
- color.x = x_873;
- const float3 x_495 = float3(x_192.y, x_192.x, x_192.y);
- const float3 x_874 = color;
- color = float3(0.0f, 0.0f, 0.0f);
- color = x_874;
- const int x_293 = obj.numbers[7];
- const float x_875 = uv.x;
- uv.x = 0.0f;
- uv.x = x_875;
- const float3 x_496 = float3(x_475.x, x_467.y, x_467.x);
- const float x_876 = color.y;
- color.y = 0.0f;
- color.y = x_876;
- const float2 x_497 = float2(x_477.x, x_461.y);
- const int x_877 = obj.numbers[0u];
- obj.numbers[0u] = 0;
- obj.numbers[0u] = x_877;
- const float x_878 = color.y;
- color.y = 0.0f;
- color.y = x_878;
- const float3 x_498 = float3(x_478.x, x_478.y, x_478.x);
- const float x_879 = color.x;
- color.x = 0.0f;
- color.x = x_879;
- const float x_296 = color.z;
- const float x_880 = uv.y;
- uv.y = 0.0f;
- uv.y = x_880;
- const float2 x_499 = float2(x_184.x, x_184.y);
- const float x_881 = uv.x;
- uv.x = 0.0f;
- uv.x = x_881;
- const float x_882 = uv.y;
- uv.y = 0.0f;
- uv.y = x_882;
- const float x_883 = uv.y;
- uv.y = 0.0f;
- uv.y = x_883;
- const float3 x_500 = float3(x_499.y, x_499.y, x_494.z);
- const float x_884 = color.z;
- color.z = 0.0f;
- color.z = x_884;
- color.z = (float(x_293) + x_296);
- const float x_885 = color.y;
- color.y = 0.0f;
- color.y = x_885;
- const float2 x_501 = float2(x_453.x, x_453.z);
- const float x_886 = color.x;
- color.x = 0.0f;
- color.x = x_886;
- }
- const int x_887 = i_2;
- i_2 = 0;
- i_2 = x_887;
- const float2 x_502 = float2(x_451.y, x_192.y);
- const float2 x_888 = uv;
- uv = float2(0.0f, 0.0f);
- uv = x_888;
- const int x_301 = obj.numbers[8];
- const int x_889 = i_2;
- i_2 = 0;
- i_2 = x_889;
- const float2 x_503 = float2(x_185.x, x_451.z);
- const int x_890 = obj.numbers[8];
- obj.numbers[8] = 0;
- obj.numbers[8] = x_890;
- const float x_891 = color.y;
- color.y = 0.0f;
- color.y = x_891;
- const float2 x_504 = float2(x_453.y, float2(0.0f, 0.0f).x);
- const float x_892 = color.x;
- color.x = 0.0f;
- color.x = x_892;
- const float3 x_505 = float3(x_504.x, x_504.y, x_504.x);
- const float x_893 = color.z;
- color.z = 0.0f;
- color.z = x_893;
- const float x_304 = color.z;
- const float x_894 = color.x;
- color.x = 0.0f;
- color.x = x_894;
- const float2 x_506 = float2(x_493.x, x_492.x);
- const int x_895 = obj.numbers[4];
- obj.numbers[4] = 0;
- obj.numbers[4] = x_895;
- const float x_896 = uv.y;
- uv.y = 0.0f;
- uv.y = x_896;
- const float2 x_507 = float2(x_461.x, x_447.x);
- const float x_897 = color.y;
- color.y = 0.0f;
- color.y = x_897;
- color.z = (x_304 + float(x_301));
- const float2 x_898 = uv;
- uv = float2(0.0f, 0.0f);
- uv = x_898;
- const float x_899 = uv.x;
- uv.x = 0.0f;
- uv.x = x_899;
- const float3 x_508 = float3(x_461.y, x_461.x, x_506.y);
- const float x_900 = uv.x;
- uv.x = 0.0f;
- uv.x = x_900;
- const float x_308 = uv.x;
- const float x_901 = color.y;
- color.y = 0.0f;
- color.y = x_901;
- const float3 x_509 = float3(x_503.y, x_503.x, x_448.z);
- const float x_902 = uv.y;
- uv.y = 0.0f;
- uv.y = x_902;
- const float x_310 = uv.y;
- const float x_903 = uv.y;
- uv.y = 0.0f;
- uv.y = x_903;
- const float x_904 = color.z;
- color.z = 0.0f;
- color.z = x_904;
- const float3 x_510 = float3(float3(1.0f, 2.0f, 3.0f).y, x_485.y, x_485.z);
- const float x_905 = color.z;
- color.z = 0.0f;
- color.z = x_905;
- const int x_906 = i_2;
- i_2 = 0;
- i_2 = x_906;
- const float2 x_511 = float2(x_485.z, x_485.y);
- const float3 x_907 = color;
- color = float3(0.0f, 0.0f, 0.0f);
- color = x_907;
- const float x_908 = uv.y;
- uv.y = 0.0f;
- uv.y = x_908;
- const float3 x_512 = float3(x_455.y, x_455.y, x_455.y);
- const int x_909 = obj.numbers[4];
- obj.numbers[4] = 0;
- obj.numbers[4] = x_909;
- if ((abs((x_308 - x_310)) < 0.25f)) {
- const float x_910 = uv.x;
- uv.x = 0.0f;
- uv.x = x_910;
- const QuicksortObject x_911 = obj;
- const int tint_symbol_74[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
- const QuicksortObject tint_symbol_75 = {tint_symbol_74};
- obj = tint_symbol_75;
- obj = x_911;
- const float3 x_513 = float3(x_505.z, x_505.x, x_448.x);
- const int x_912 = obj.numbers[8];
- obj.numbers[8] = 0;
- obj.numbers[8] = x_912;
- const int x_317 = obj.numbers[9u];
- const float3 x_514 = float3(x_474.y, x_474.y, x_474.y);
- const float x_913 = uv.y;
- uv.y = 0.0f;
- uv.y = x_913;
- const float x_320 = color.x;
- const float x_914 = uv.y;
- uv.y = 0.0f;
- uv.y = x_914;
- const float2 x_515 = float2(x_502.x, x_502.y);
- const float x_915 = color.x;
- color.x = 0.0f;
- color.x = x_915;
- const float3 x_916 = color;
- color = float3(0.0f, 0.0f, 0.0f);
- color = x_916;
- const float2 x_516 = float2(x_452.x, x_452.x);
- const float2 x_917 = uv;
- uv = float2(0.0f, 0.0f);
- uv = x_917;
- const float x_918 = uv.x;
- uv.x = 0.0f;
- uv.x = x_918;
- const float3 x_517 = float3(float2(0.0f, 0.0f).x, float2(0.0f, 0.0f).x, float2(0.0f, 0.0f).y);
- color.x = (float(x_317) + x_320);
- const float x_919 = color.x;
- color.x = 0.0f;
- color.x = x_919;
- const float3 x_518 = float3(x_480.y, x_508.x, x_480.x);
- const float x_920 = color.x;
- color.x = 0.0f;
- color.x = x_920;
- }
- const float x_921 = uv.y;
- uv.y = 0.0f;
- uv.y = x_921;
- const float3 x_325 = color;
- const float x_922 = uv[0];
- uv[0] = 0.0f;
- uv[0] = x_922;
- const float3 x_519 = float3(x_447.x, x_446.x, x_446.y);
- const float3 x_326 = normalize(x_325);
- const float x_923 = uv.x;
- uv.x = 0.0f;
- uv.x = x_923;
- const QuicksortObject x_924 = obj;
- const int tint_symbol_76[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
- const QuicksortObject tint_symbol_77 = {tint_symbol_76};
- obj = tint_symbol_77;
- obj = x_924;
- const QuicksortObject x_925 = obj;
- const int tint_symbol_78[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
- const QuicksortObject tint_symbol_79 = {tint_symbol_78};
- obj = tint_symbol_79;
- obj = x_925;
- const float x_926 = color.y;
- color.y = 0.0f;
- color.y = x_926;
- const float2 x_520 = float2(x_506.y, x_519.y);
- const float x_927 = color.y;
- color.y = 0.0f;
- color.y = x_927;
- const float4 x_330 = float4(x_326.x, x_326.y, x_326.z, 1.0f);
- const float x_928 = uv.y;
- uv.y = 0.0f;
- uv.y = x_928;
- const float3 x_521 = float3(float3(1.0f, 2.0f, 3.0f).y, float3(1.0f, 2.0f, 3.0f).y, x_520.y);
- const float x_929 = uv.x;
- uv.x = 0.0f;
- uv.x = x_929;
- x_GLF_color = x_330;
- const QuicksortObject x_930 = obj;
- const int tint_symbol_80[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
- const QuicksortObject tint_symbol_81 = {tint_symbol_80};
- obj = tint_symbol_81;
- obj = x_930;
- const float3 x_522 = float3(x_330.w, x_330.y, x_493.x);
- const float x_931 = color.x;
- color.x = 0.0f;
- color.x = x_931;
- return;
-}
-
-struct main_out {
- float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
- float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
- float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
- gl_FragCoord = gl_FragCoord_param;
- main_1();
- const main_out tint_symbol_82 = {x_GLF_color};
- return tint_symbol_82;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
- const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
- tint_symbol_2 wrapper_result = (tint_symbol_2)0;
- wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
- return wrapper_result;
-}
-C:\src\tint\test\Shader@0x000001EB41548320(156,10-21): error X3531: can't unroll loops marked with loop attribute
-
diff --git a/test/bug/tint/998.wgsl.expected.hlsl b/test/bug/tint/998.wgsl.expected.hlsl
deleted file mode 100644
index 30eb1a0..0000000
--- a/test/bug/tint/998.wgsl.expected.hlsl
+++ /dev/null
@@ -1,21 +0,0 @@
-SKIP: FAILED
-
-cbuffer cbuffer_constants : register(b0, space1) {
- uint4 constants[1];
-};
-
-RWByteAddressBuffer result : register(u1, space1);
-
-struct S {
- uint data[3];
-};
-
-static S s = (S)0;
-
-[numthreads(1, 1, 1)]
-void main() {
- s.data[constants[0].x] = 0u;
- return;
-}
-C:\src\tint\test\Shader@0x00000150124FBBE0(15,3-24): error X3500: array reference cannot be used as an l-value; not natively addressable
-
diff --git a/test/statements/assign/indexed_assign_to_array_in_struct/in_for_loop_body.wgsl b/test/statements/assign/indexed_assign_to_array_in_struct/in_for_loop_body.wgsl
new file mode 100644
index 0000000..379856e
--- /dev/null
+++ b/test/statements/assign/indexed_assign_to_array_in_struct/in_for_loop_body.wgsl
@@ -0,0 +1,22 @@
+struct Uniforms {
+ i : u32;
+};
+
+struct InnerS {
+ v : i32;
+};
+
+struct OuterS {
+ a1 : array<InnerS, 8>;
+};
+
+[[group(1), binding(4)]] var<uniform> uniforms : Uniforms;
+
+[[stage(compute), workgroup_size(1)]]
+fn main() {
+ var v : InnerS;
+ var s1 : OuterS;
+ for (var i: i32 = 0; i < 4; i = i + 1) {
+ s1.a1[uniforms.i] = v;
+ }
+}
diff --git a/test/statements/assign/indexed_assign_to_array_in_struct/in_for_loop_body.wgsl.expected.hlsl b/test/statements/assign/indexed_assign_to_array_in_struct/in_for_loop_body.wgsl.expected.hlsl
new file mode 100644
index 0000000..f82b13f
--- /dev/null
+++ b/test/statements/assign/indexed_assign_to_array_in_struct/in_for_loop_body.wgsl.expected.hlsl
@@ -0,0 +1,26 @@
+struct InnerS {
+ int v;
+};
+struct OuterS {
+ InnerS a1[8];
+};
+
+cbuffer cbuffer_uniforms : register(b4, space1) {
+ uint4 uniforms[1];
+};
+
+[numthreads(1, 1, 1)]
+void main() {
+ InnerS v = (InnerS)0;
+ OuterS s1 = (OuterS)0;
+ {
+ [loop] for(int i = 0; (i < 4); i = (i + 1)) {
+ {
+ InnerS tint_symbol_1[8] = s1.a1;
+ tint_symbol_1[uniforms[0].x] = v;
+ s1.a1 = tint_symbol_1;
+ }
+ }
+ }
+ return;
+}
diff --git a/test/statements/assign/indexed_assign_to_array_in_struct/in_for_loop_continuing.wgsl b/test/statements/assign/indexed_assign_to_array_in_struct/in_for_loop_continuing.wgsl
new file mode 100644
index 0000000..5ca5836
--- /dev/null
+++ b/test/statements/assign/indexed_assign_to_array_in_struct/in_for_loop_continuing.wgsl
@@ -0,0 +1,22 @@
+struct Uniforms {
+ i : u32;
+};
+
+struct InnerS {
+ v : i32;
+};
+
+struct OuterS {
+ a1 : array<InnerS, 8>;
+};
+
+[[group(1), binding(4)]] var<uniform> uniforms : Uniforms;
+
+[[stage(compute), workgroup_size(1)]]
+fn main() {
+ var v : InnerS;
+ var s1 : OuterS;
+ for (var i: i32 = 0; i < 4; s1.a1[uniforms.i] = v) {
+ i = i + 1;
+ }
+}
diff --git a/test/statements/assign/indexed_assign_to_array_in_struct/in_for_loop_continuing.wgsl.expected.hlsl b/test/statements/assign/indexed_assign_to_array_in_struct/in_for_loop_continuing.wgsl.expected.hlsl
new file mode 100644
index 0000000..382880a
--- /dev/null
+++ b/test/statements/assign/indexed_assign_to_array_in_struct/in_for_loop_continuing.wgsl.expected.hlsl
@@ -0,0 +1,29 @@
+struct InnerS {
+ int v;
+};
+struct OuterS {
+ InnerS a1[8];
+};
+
+cbuffer cbuffer_uniforms : register(b4, space1) {
+ uint4 uniforms[1];
+};
+
+[numthreads(1, 1, 1)]
+void main() {
+ InnerS v = (InnerS)0;
+ OuterS s1 = (OuterS)0;
+ {
+ int i = 0;
+ [loop] while (true) {
+ if (!((i < 4))) { break; }
+ i = (i + 1);
+ {
+ InnerS tint_symbol_1[8] = s1.a1;
+ tint_symbol_1[uniforms[0].x] = v;
+ s1.a1 = tint_symbol_1;
+ }
+ }
+ }
+ return;
+}
diff --git a/test/statements/assign/indexed_assign_to_array_in_struct/in_for_loop_init.wgsl b/test/statements/assign/indexed_assign_to_array_in_struct/in_for_loop_init.wgsl
new file mode 100644
index 0000000..d9dd6b2
--- /dev/null
+++ b/test/statements/assign/indexed_assign_to_array_in_struct/in_for_loop_init.wgsl
@@ -0,0 +1,22 @@
+struct Uniforms {
+ i : u32;
+};
+
+struct InnerS {
+ v : i32;
+};
+
+struct OuterS {
+ a1 : array<InnerS, 8>;
+};
+
+[[group(1), binding(4)]] var<uniform> uniforms : Uniforms;
+
+[[stage(compute), workgroup_size(1)]]
+fn main() {
+ var v : InnerS;
+ var s1 : OuterS;
+ var i: i32 = 0;
+ for (s1.a1[uniforms.i] = v; i < 4; i = i + 1) {
+ }
+}
diff --git a/test/statements/assign/indexed_assign_to_array_in_struct/in_for_loop_init.wgsl.expected.hlsl b/test/statements/assign/indexed_assign_to_array_in_struct/in_for_loop_init.wgsl.expected.hlsl
new file mode 100644
index 0000000..78f5452
--- /dev/null
+++ b/test/statements/assign/indexed_assign_to_array_in_struct/in_for_loop_init.wgsl.expected.hlsl
@@ -0,0 +1,27 @@
+struct InnerS {
+ int v;
+};
+struct OuterS {
+ InnerS a1[8];
+};
+
+cbuffer cbuffer_uniforms : register(b4, space1) {
+ uint4 uniforms[1];
+};
+
+[numthreads(1, 1, 1)]
+void main() {
+ InnerS v = (InnerS)0;
+ OuterS s1 = (OuterS)0;
+ int i = 0;
+ {
+ {
+ InnerS tint_symbol_1[8] = s1.a1;
+ tint_symbol_1[uniforms[0].x] = v;
+ s1.a1 = tint_symbol_1;
+ }
+ [loop] for(; (i < 4); i = (i + 1)) {
+ }
+ }
+ return;
+}
diff --git a/test/statements/assign/indexed_assign_to_array_in_struct/indexing_with_side_effect_func.wgsl b/test/statements/assign/indexed_assign_to_array_in_struct/indexing_with_side_effect_func.wgsl
new file mode 100644
index 0000000..9d569e3
--- /dev/null
+++ b/test/statements/assign/indexed_assign_to_array_in_struct/indexing_with_side_effect_func.wgsl
@@ -0,0 +1,31 @@
+struct Uniforms {
+ i : u32;
+ j : u32;
+};
+
+struct InnerS {
+ v : i32;
+};
+
+struct S1 {
+ a2 : array<InnerS, 8>;
+};
+
+struct OuterS {
+ a1 : array<S1, 8>;
+};
+
+var<private> nextIndex : u32;
+fn getNextIndex() -> u32 {
+ nextIndex = nextIndex + 1u;
+ return nextIndex;
+}
+
+[[group(1), binding(4)]] var<uniform> uniforms : Uniforms;
+
+[[stage(compute), workgroup_size(1)]]
+fn main() {
+ var v : InnerS;
+ var s : OuterS;
+ s.a1[getNextIndex()].a2[uniforms.j] = v;
+}
diff --git a/test/statements/assign/indexed_assign_to_array_in_struct/indexing_with_side_effect_func.wgsl.expected.hlsl b/test/statements/assign/indexed_assign_to_array_in_struct/indexing_with_side_effect_func.wgsl.expected.hlsl
new file mode 100644
index 0000000..eff5fb2
--- /dev/null
+++ b/test/statements/assign/indexed_assign_to_array_in_struct/indexing_with_side_effect_func.wgsl.expected.hlsl
@@ -0,0 +1,35 @@
+struct InnerS {
+ int v;
+};
+struct S1 {
+ InnerS a2[8];
+};
+struct OuterS {
+ S1 a1[8];
+};
+
+static uint nextIndex = 0u;
+
+uint getNextIndex() {
+ nextIndex = (nextIndex + 1u);
+ return nextIndex;
+}
+
+cbuffer cbuffer_uniforms : register(b4, space1) {
+ uint4 uniforms[1];
+};
+
+[numthreads(1, 1, 1)]
+void main() {
+ InnerS v = (InnerS)0;
+ OuterS s = (OuterS)0;
+ {
+ S1 tint_symbol_1[8] = s.a1;
+ const uint tint_symbol_2_save = getNextIndex();
+ InnerS tint_symbol_3[8] = tint_symbol_1[tint_symbol_2_save].a2;
+ tint_symbol_3[uniforms[0].y] = v;
+ tint_symbol_1[tint_symbol_2_save].a2 = tint_symbol_3;
+ s.a1 = tint_symbol_1;
+ }
+ return;
+}
diff --git a/test/statements/assign/indexed_assign_to_array_in_struct/struct_array.wgsl b/test/statements/assign/indexed_assign_to_array_in_struct/struct_array.wgsl
new file mode 100644
index 0000000..2268109
--- /dev/null
+++ b/test/statements/assign/indexed_assign_to_array_in_struct/struct_array.wgsl
@@ -0,0 +1,21 @@
+struct Uniforms {
+ i : u32;
+};
+
+struct InnerS {
+ v : i32;
+};
+
+struct OuterS {
+ a1 : array<InnerS, 8>;
+};
+
+[[group(1), binding(4)]] var<uniform> uniforms : Uniforms;
+
+[[stage(compute), workgroup_size(1)]]
+fn main() {
+ var v : InnerS;
+ var s1 : OuterS;
+ s1.a1[uniforms.i] = v;
+ //s1.a1[0] = v;
+}
diff --git a/test/statements/assign/indexed_assign_to_array_in_struct/struct_array.wgsl.expected.hlsl b/test/statements/assign/indexed_assign_to_array_in_struct/struct_array.wgsl.expected.hlsl
new file mode 100644
index 0000000..15ddcb2
--- /dev/null
+++ b/test/statements/assign/indexed_assign_to_array_in_struct/struct_array.wgsl.expected.hlsl
@@ -0,0 +1,22 @@
+struct InnerS {
+ int v;
+};
+struct OuterS {
+ InnerS a1[8];
+};
+
+cbuffer cbuffer_uniforms : register(b4, space1) {
+ uint4 uniforms[1];
+};
+
+[numthreads(1, 1, 1)]
+void main() {
+ InnerS v = (InnerS)0;
+ OuterS s1 = (OuterS)0;
+ {
+ InnerS tint_symbol_1[8] = s1.a1;
+ tint_symbol_1[uniforms[0].x] = v;
+ s1.a1 = tint_symbol_1;
+ }
+ return;
+}
diff --git a/test/statements/assign/indexed_assign_to_array_in_struct/struct_array_array.wgsl b/test/statements/assign/indexed_assign_to_array_in_struct/struct_array_array.wgsl
new file mode 100644
index 0000000..2f0e920
--- /dev/null
+++ b/test/statements/assign/indexed_assign_to_array_in_struct/struct_array_array.wgsl
@@ -0,0 +1,21 @@
+struct Uniforms {
+ i : u32;
+ j : u32;
+};
+
+struct InnerS {
+ v : i32;
+};
+
+struct OuterS {
+ a1 : array<array<InnerS, 8>, 8>;
+};
+
+[[group(1), binding(4)]] var<uniform> uniforms : Uniforms;
+
+[[stage(compute), workgroup_size(1)]]
+fn main() {
+ var v : InnerS;
+ var s1 : OuterS;
+ s1.a1[uniforms.i][uniforms.j] = v;
+}
diff --git a/test/statements/assign/indexed_assign_to_array_in_struct/struct_array_array.wgsl.expected.hlsl b/test/statements/assign/indexed_assign_to_array_in_struct/struct_array_array.wgsl.expected.hlsl
new file mode 100644
index 0000000..6ebca2e
--- /dev/null
+++ b/test/statements/assign/indexed_assign_to_array_in_struct/struct_array_array.wgsl.expected.hlsl
@@ -0,0 +1,22 @@
+struct InnerS {
+ int v;
+};
+struct OuterS {
+ InnerS a1[8][8];
+};
+
+cbuffer cbuffer_uniforms : register(b4, space1) {
+ uint4 uniforms[1];
+};
+
+[numthreads(1, 1, 1)]
+void main() {
+ InnerS v = (InnerS)0;
+ OuterS s1 = (OuterS)0;
+ {
+ InnerS tint_symbol_1[8][8] = s1.a1;
+ tint_symbol_1[uniforms[0].x][uniforms[0].y] = v;
+ s1.a1 = tint_symbol_1;
+ }
+ return;
+}
diff --git a/test/statements/assign/indexed_assign_to_array_in_struct/struct_array_struct.wgsl b/test/statements/assign/indexed_assign_to_array_in_struct/struct_array_struct.wgsl
new file mode 100644
index 0000000..2dfdfc8
--- /dev/null
+++ b/test/statements/assign/indexed_assign_to_array_in_struct/struct_array_struct.wgsl
@@ -0,0 +1,24 @@
+struct Uniforms {
+ i : u32;
+};
+
+struct InnerS {
+ v : i32;
+};
+
+struct S1 {
+ s2 : InnerS;
+};
+
+struct OuterS {
+ a1 : array<S1, 8>;
+};
+
+[[group(1), binding(4)]] var<uniform> uniforms : Uniforms;
+
+[[stage(compute), workgroup_size(1)]]
+fn main() {
+ var v : InnerS;
+ var s1 : OuterS;
+ s1.a1[uniforms.i].s2 = v;
+}
diff --git a/test/statements/assign/indexed_assign_to_array_in_struct/struct_array_struct.wgsl.expected.hlsl b/test/statements/assign/indexed_assign_to_array_in_struct/struct_array_struct.wgsl.expected.hlsl
new file mode 100644
index 0000000..24cee3d
--- /dev/null
+++ b/test/statements/assign/indexed_assign_to_array_in_struct/struct_array_struct.wgsl.expected.hlsl
@@ -0,0 +1,25 @@
+struct InnerS {
+ int v;
+};
+struct S1 {
+ InnerS s2;
+};
+struct OuterS {
+ S1 a1[8];
+};
+
+cbuffer cbuffer_uniforms : register(b4, space1) {
+ uint4 uniforms[1];
+};
+
+[numthreads(1, 1, 1)]
+void main() {
+ InnerS v = (InnerS)0;
+ OuterS s1 = (OuterS)0;
+ {
+ S1 tint_symbol_1[8] = s1.a1;
+ tint_symbol_1[uniforms[0].x].s2 = v;
+ s1.a1 = tint_symbol_1;
+ }
+ return;
+}
diff --git a/test/statements/assign/indexed_assign_to_array_in_struct/struct_array_struct_array.wgsl b/test/statements/assign/indexed_assign_to_array_in_struct/struct_array_struct_array.wgsl
new file mode 100644
index 0000000..c8d97e5
--- /dev/null
+++ b/test/statements/assign/indexed_assign_to_array_in_struct/struct_array_struct_array.wgsl
@@ -0,0 +1,25 @@
+struct Uniforms {
+ i : u32;
+ j : u32;
+};
+
+struct InnerS {
+ v : i32;
+};
+
+struct S1 {
+ a2 : array<InnerS, 8>;
+};
+
+struct OuterS {
+ a1 : array<S1, 8>;
+};
+
+[[group(1), binding(4)]] var<uniform> uniforms : Uniforms;
+
+[[stage(compute), workgroup_size(1)]]
+fn main() {
+ var v : InnerS;
+ var s : OuterS;
+ s.a1[uniforms.i].a2[uniforms.j] = v;
+}
diff --git a/test/statements/assign/indexed_assign_to_array_in_struct/struct_array_struct_array.wgsl.expected.hlsl b/test/statements/assign/indexed_assign_to_array_in_struct/struct_array_struct_array.wgsl.expected.hlsl
new file mode 100644
index 0000000..f411372
--- /dev/null
+++ b/test/statements/assign/indexed_assign_to_array_in_struct/struct_array_struct_array.wgsl.expected.hlsl
@@ -0,0 +1,28 @@
+struct InnerS {
+ int v;
+};
+struct S1 {
+ InnerS a2[8];
+};
+struct OuterS {
+ S1 a1[8];
+};
+
+cbuffer cbuffer_uniforms : register(b4, space1) {
+ uint4 uniforms[1];
+};
+
+[numthreads(1, 1, 1)]
+void main() {
+ InnerS v = (InnerS)0;
+ OuterS s = (OuterS)0;
+ {
+ S1 tint_symbol_1[8] = s.a1;
+ const uint tint_symbol_2_save = uniforms[0].x;
+ InnerS tint_symbol_3[8] = tint_symbol_1[tint_symbol_2_save].a2;
+ tint_symbol_3[uniforms[0].y] = v;
+ tint_symbol_1[tint_symbol_2_save].a2 = tint_symbol_3;
+ s.a1 = tint_symbol_1;
+ }
+ return;
+}
diff --git a/test/statements/assign/indexed_assign_to_array_in_struct/struct_dynamic_array.wgsl b/test/statements/assign/indexed_assign_to_array_in_struct/struct_dynamic_array.wgsl
new file mode 100644
index 0000000..99ad0f0
--- /dev/null
+++ b/test/statements/assign/indexed_assign_to_array_in_struct/struct_dynamic_array.wgsl
@@ -0,0 +1,20 @@
+struct Uniforms {
+ i : u32;
+};
+
+struct InnerS {
+ v : i32;
+};
+
+struct OuterS {
+ a1 : array<InnerS>;
+};
+
+[[group(1), binding(4)]] var<uniform> uniforms : Uniforms;
+[[binding(0), group(0)]] var<storage, read_write> s1 : OuterS;
+
+[[stage(compute), workgroup_size(1)]]
+fn main() {
+ var v : InnerS;
+ s1.a1[uniforms.i] = v;
+}
diff --git a/test/statements/assign/indexed_assign_to_array_in_struct/struct_dynamic_array.wgsl.expected.hlsl b/test/statements/assign/indexed_assign_to_array_in_struct/struct_dynamic_array.wgsl.expected.hlsl
new file mode 100644
index 0000000..4ae0605
--- /dev/null
+++ b/test/statements/assign/indexed_assign_to_array_in_struct/struct_dynamic_array.wgsl.expected.hlsl
@@ -0,0 +1,19 @@
+struct InnerS {
+ int v;
+};
+
+cbuffer cbuffer_uniforms : register(b4, space1) {
+ uint4 uniforms[1];
+};
+RWByteAddressBuffer s1 : register(u0, space0);
+
+void tint_symbol_1(RWByteAddressBuffer buffer, uint offset, InnerS value) {
+ buffer.Store((offset + 0u), asuint(value.v));
+}
+
+[numthreads(1, 1, 1)]
+void main() {
+ InnerS v = (InnerS)0;
+ tint_symbol_1(s1, (4u * uniforms[0].x), v);
+ return;
+}
diff --git a/test/statements/assign/indexed_assign_to_array_in_struct/struct_dynamic_array_struct_array.wgsl b/test/statements/assign/indexed_assign_to_array_in_struct/struct_dynamic_array_struct_array.wgsl
new file mode 100644
index 0000000..0d40e81
--- /dev/null
+++ b/test/statements/assign/indexed_assign_to_array_in_struct/struct_dynamic_array_struct_array.wgsl
@@ -0,0 +1,25 @@
+struct Uniforms {
+ i : u32;
+ j : u32;
+};
+
+struct InnerS {
+ v : i32;
+};
+
+struct S1 {
+ a2 : array<InnerS, 8>;
+};
+
+struct OuterS {
+ a1 : array<S1>;
+};
+
+[[group(1), binding(4)]] var<uniform> uniforms : Uniforms;
+[[binding(0), group(0)]] var<storage, read_write> s : OuterS;
+
+[[stage(compute), workgroup_size(1)]]
+fn main() {
+ var v : InnerS;
+ s.a1[uniforms.i].a2[uniforms.j] = v;
+}
diff --git a/test/statements/assign/indexed_assign_to_array_in_struct/struct_dynamic_array_struct_array.wgsl.expected.hlsl b/test/statements/assign/indexed_assign_to_array_in_struct/struct_dynamic_array_struct_array.wgsl.expected.hlsl
new file mode 100644
index 0000000..222fd91
--- /dev/null
+++ b/test/statements/assign/indexed_assign_to_array_in_struct/struct_dynamic_array_struct_array.wgsl.expected.hlsl
@@ -0,0 +1,19 @@
+struct InnerS {
+ int v;
+};
+
+cbuffer cbuffer_uniforms : register(b4, space1) {
+ uint4 uniforms[1];
+};
+RWByteAddressBuffer s : register(u0, space0);
+
+void tint_symbol_1(RWByteAddressBuffer buffer, uint offset, InnerS value) {
+ buffer.Store((offset + 0u), asuint(value.v));
+}
+
+[numthreads(1, 1, 1)]
+void main() {
+ InnerS v = (InnerS)0;
+ tint_symbol_1(s, ((32u * uniforms[0].x) + (4u * uniforms[0].y)), v);
+ return;
+}
diff --git a/test/statements/assign/indexed_assign_to_array_in_struct/struct_matrix.wgsl b/test/statements/assign/indexed_assign_to_array_in_struct/struct_matrix.wgsl
new file mode 100644
index 0000000..3c67742
--- /dev/null
+++ b/test/statements/assign/indexed_assign_to_array_in_struct/struct_matrix.wgsl
@@ -0,0 +1,16 @@
+struct Uniforms {
+ i : u32;
+};
+
+struct OuterS {
+ m1 : mat2x4<f32>;
+};
+
+[[group(1), binding(4)]] var<uniform> uniforms : Uniforms;
+
+[[stage(compute), workgroup_size(1)]]
+fn main() {
+ var s1 : OuterS;
+ s1.m1[uniforms.i] = vec4<f32>(1.0);
+ s1.m1[uniforms.i][uniforms.i] = 1.0;
+}
diff --git a/test/statements/assign/indexed_assign_to_array_in_struct/struct_matrix.wgsl.expected.hlsl b/test/statements/assign/indexed_assign_to_array_in_struct/struct_matrix.wgsl.expected.hlsl
new file mode 100644
index 0000000..819665d
--- /dev/null
+++ b/test/statements/assign/indexed_assign_to_array_in_struct/struct_matrix.wgsl.expected.hlsl
@@ -0,0 +1,33 @@
+void set_vector_float2x4(inout float2x4 mat, int col, float4 val) {
+ switch (col) {
+ case 0: mat[0] = val; break;
+ case 1: mat[1] = val; break;
+ }
+}
+
+void set_scalar_float2x4(inout float2x4 mat, int col, int row, float val) {
+ switch (col) {
+ case 0:
+ mat[0] = (row.xxxx == int4(0, 1, 2, 3)) ? val.xxxx : mat[0];
+ break;
+ case 1:
+ mat[1] = (row.xxxx == int4(0, 1, 2, 3)) ? val.xxxx : mat[1];
+ break;
+ }
+}
+
+struct OuterS {
+ float2x4 m1;
+};
+
+cbuffer cbuffer_uniforms : register(b4, space1) {
+ uint4 uniforms[1];
+};
+
+[numthreads(1, 1, 1)]
+void main() {
+ OuterS s1 = (OuterS)0;
+ set_vector_float2x4(s1.m1, uniforms[0].x, float4((1.0f).xxxx));
+ set_scalar_float2x4(s1.m1, uniforms[0].x, uniforms[0].x, 1.0f);
+ return;
+}
diff --git a/test/statements/assign/indexed_assign_to_array_in_struct/struct_multiple_arrays.wgsl b/test/statements/assign/indexed_assign_to_array_in_struct/struct_multiple_arrays.wgsl
new file mode 100644
index 0000000..1fcd397
--- /dev/null
+++ b/test/statements/assign/indexed_assign_to_array_in_struct/struct_multiple_arrays.wgsl
@@ -0,0 +1,22 @@
+struct Uniforms {
+ i : u32;
+};
+
+struct InnerS {
+ v : i32;
+};
+
+struct OuterS {
+ a1 : array<InnerS, 8>;
+ a2 : array<InnerS, 8>;
+};
+
+[[group(1), binding(4)]] var<uniform> uniforms : Uniforms;
+
+[[stage(compute), workgroup_size(1)]]
+fn main() {
+ var v : InnerS;
+ var s1 : OuterS;
+ s1.a1[uniforms.i] = v;
+ s1.a2[uniforms.i] = v;
+}
diff --git a/test/statements/assign/indexed_assign_to_array_in_struct/struct_multiple_arrays.wgsl.expected.hlsl b/test/statements/assign/indexed_assign_to_array_in_struct/struct_multiple_arrays.wgsl.expected.hlsl
new file mode 100644
index 0000000..aa6d6bc
--- /dev/null
+++ b/test/statements/assign/indexed_assign_to_array_in_struct/struct_multiple_arrays.wgsl.expected.hlsl
@@ -0,0 +1,28 @@
+struct InnerS {
+ int v;
+};
+struct OuterS {
+ InnerS a1[8];
+ InnerS a2[8];
+};
+
+cbuffer cbuffer_uniforms : register(b4, space1) {
+ uint4 uniforms[1];
+};
+
+[numthreads(1, 1, 1)]
+void main() {
+ InnerS v = (InnerS)0;
+ OuterS s1 = (OuterS)0;
+ {
+ InnerS tint_symbol_1[8] = s1.a1;
+ tint_symbol_1[uniforms[0].x] = v;
+ s1.a1 = tint_symbol_1;
+ }
+ {
+ InnerS tint_symbol_3[8] = s1.a2;
+ tint_symbol_3[uniforms[0].x] = v;
+ s1.a2 = tint_symbol_3;
+ }
+ return;
+}
diff --git a/test/statements/assign/indexed_assign_to_array_in_struct/struct_struct_array.wgsl b/test/statements/assign/indexed_assign_to_array_in_struct/struct_struct_array.wgsl
new file mode 100644
index 0000000..bff1418
--- /dev/null
+++ b/test/statements/assign/indexed_assign_to_array_in_struct/struct_struct_array.wgsl
@@ -0,0 +1,24 @@
+struct Uniforms {
+ i : u32;
+};
+
+struct InnerS {
+ v : i32;
+};
+
+struct S1 {
+ a : array<InnerS, 8>;
+};
+
+struct OuterS {
+ s2 : S1;
+};
+
+[[group(1), binding(4)]] var<uniform> uniforms : Uniforms;
+
+[[stage(compute), workgroup_size(1)]]
+fn main() {
+ var v : InnerS;
+ var s1 : OuterS;
+ s1.s2.a[uniforms.i] = v;
+}
diff --git a/test/statements/assign/indexed_assign_to_array_in_struct/struct_struct_array.wgsl.expected.hlsl b/test/statements/assign/indexed_assign_to_array_in_struct/struct_struct_array.wgsl.expected.hlsl
new file mode 100644
index 0000000..47f844c
--- /dev/null
+++ b/test/statements/assign/indexed_assign_to_array_in_struct/struct_struct_array.wgsl.expected.hlsl
@@ -0,0 +1,25 @@
+struct InnerS {
+ int v;
+};
+struct S1 {
+ InnerS a[8];
+};
+struct OuterS {
+ S1 s2;
+};
+
+cbuffer cbuffer_uniforms : register(b4, space1) {
+ uint4 uniforms[1];
+};
+
+[numthreads(1, 1, 1)]
+void main() {
+ InnerS v = (InnerS)0;
+ OuterS s1 = (OuterS)0;
+ {
+ InnerS tint_symbol_1[8] = s1.s2.a;
+ tint_symbol_1[uniforms[0].x] = v;
+ s1.s2.a = tint_symbol_1;
+ }
+ return;
+}
diff --git a/test/statements/assign/indexed_assign_to_array_in_struct/struct_vector.wgsl b/test/statements/assign/indexed_assign_to_array_in_struct/struct_vector.wgsl
new file mode 100644
index 0000000..578124f
--- /dev/null
+++ b/test/statements/assign/indexed_assign_to_array_in_struct/struct_vector.wgsl
@@ -0,0 +1,15 @@
+struct Uniforms {
+ i : u32;
+};
+
+struct OuterS {
+ v1 : vec3<f32>;
+};
+
+[[group(1), binding(4)]] var<uniform> uniforms : Uniforms;
+
+[[stage(compute), workgroup_size(1)]]
+fn main() {
+ var s1 : OuterS;
+ s1.v1[uniforms.i] = 1.0;
+}
diff --git a/test/statements/assign/indexed_assign_to_array_in_struct/struct_vector.wgsl.expected.hlsl b/test/statements/assign/indexed_assign_to_array_in_struct/struct_vector.wgsl.expected.hlsl
new file mode 100644
index 0000000..dc3f415
--- /dev/null
+++ b/test/statements/assign/indexed_assign_to_array_in_struct/struct_vector.wgsl.expected.hlsl
@@ -0,0 +1,18 @@
+void set_float3(inout float3 vec, int idx, float val) {
+ vec = (idx.xxx == int3(0, 1, 2)) ? val.xxx : vec;
+}
+
+struct OuterS {
+ float3 v1;
+};
+
+cbuffer cbuffer_uniforms : register(b4, space1) {
+ uint4 uniforms[1];
+};
+
+[numthreads(1, 1, 1)]
+void main() {
+ OuterS s1 = (OuterS)0;
+ set_float3(s1.v1, uniforms[0].x, 1.0f);
+ return;
+}
diff --git a/test/statements/assign/indexed_assign_to_array_in_struct/vector_assign.wgsl b/test/statements/assign/indexed_assign_to_array_in_struct/vector_assign.wgsl
new file mode 100644
index 0000000..c8b46c5
--- /dev/null
+++ b/test/statements/assign/indexed_assign_to_array_in_struct/vector_assign.wgsl
@@ -0,0 +1,21 @@
+struct Uniforms {
+ i : u32;
+};
+
+struct OuterS {
+ a1 : array<u32, 8>;
+};
+
+[[group(1), binding(4)]] var<uniform> uniforms : Uniforms;
+
+fn f(i: u32) -> u32 {
+ return i + 1u;
+}
+
+[[stage(compute), workgroup_size(1)]]
+fn main() {
+ var s1 : OuterS;
+ var v : vec3<f32>;
+ v[s1.a1[uniforms.i]] = 1.0;
+ v[f(s1.a1[uniforms.i])] = 1.0;
+}
diff --git a/test/statements/assign/indexed_assign_to_array_in_struct/vector_assign.wgsl.expected.hlsl b/test/statements/assign/indexed_assign_to_array_in_struct/vector_assign.wgsl.expected.hlsl
new file mode 100644
index 0000000..a3509f9
--- /dev/null
+++ b/test/statements/assign/indexed_assign_to_array_in_struct/vector_assign.wgsl.expected.hlsl
@@ -0,0 +1,24 @@
+void set_float3(inout float3 vec, int idx, float val) {
+ vec = (idx.xxx == int3(0, 1, 2)) ? val.xxx : vec;
+}
+
+struct OuterS {
+ uint a1[8];
+};
+
+cbuffer cbuffer_uniforms : register(b4, space1) {
+ uint4 uniforms[1];
+};
+
+uint f(uint i) {
+ return (i + 1u);
+}
+
+[numthreads(1, 1, 1)]
+void main() {
+ OuterS s1 = (OuterS)0;
+ float3 v = float3(0.0f, 0.0f, 0.0f);
+ set_float3(v, s1.a1[uniforms[0].x], 1.0f);
+ set_float3(v, f(s1.a1[uniforms[0].x]), 1.0f);
+ return;
+}
diff --git a/test/statements/assign/indexed_assign_to_array_in_struct/via_pointer.wgsl b/test/statements/assign/indexed_assign_to_array_in_struct/via_pointer.wgsl
new file mode 100644
index 0000000..b44dcfa
--- /dev/null
+++ b/test/statements/assign/indexed_assign_to_array_in_struct/via_pointer.wgsl
@@ -0,0 +1,21 @@
+struct Uniforms {
+ i : u32;
+};
+
+struct InnerS {
+ v : i32;
+};
+
+struct OuterS {
+ a1 : array<InnerS, 8>;
+};
+
+[[group(1), binding(4)]] var<uniform> uniforms : Uniforms;
+
+[[stage(compute), workgroup_size(1)]]
+fn main() {
+ var v : InnerS;
+ var s1 : OuterS;
+ let p = &(s1.a1[uniforms.i]);
+ *p = v;
+}
diff --git a/test/statements/assign/indexed_assign_to_array_in_struct/via_pointer.wgsl.expected.hlsl b/test/statements/assign/indexed_assign_to_array_in_struct/via_pointer.wgsl.expected.hlsl
new file mode 100644
index 0000000..8cedd87
--- /dev/null
+++ b/test/statements/assign/indexed_assign_to_array_in_struct/via_pointer.wgsl.expected.hlsl
@@ -0,0 +1,23 @@
+struct InnerS {
+ int v;
+};
+struct OuterS {
+ InnerS a1[8];
+};
+
+cbuffer cbuffer_uniforms : register(b4, space1) {
+ uint4 uniforms[1];
+};
+
+[numthreads(1, 1, 1)]
+void main() {
+ InnerS v = (InnerS)0;
+ OuterS s1 = (OuterS)0;
+ const uint p_save = uniforms[0].x;
+ {
+ InnerS tint_symbol_1[8] = s1.a1;
+ tint_symbol_1[p_save] = v;
+ s1.a1 = tint_symbol_1;
+ }
+ return;
+}
diff --git a/test/statements/assign/indexed_assign_to_array_in_struct/via_pointer_arg.wgsl b/test/statements/assign/indexed_assign_to_array_in_struct/via_pointer_arg.wgsl
new file mode 100644
index 0000000..2391e14
--- /dev/null
+++ b/test/statements/assign/indexed_assign_to_array_in_struct/via_pointer_arg.wgsl
@@ -0,0 +1,21 @@
+struct Uniforms {
+ i : u32;
+};
+struct InnerS {
+ v : i32;
+};
+struct OuterS {
+ a1 : array<InnerS, 8>;
+};
+[[group(1), binding(4)]] var<uniform> uniforms : Uniforms;
+
+fn f(p : ptr<function, OuterS>) {
+ var v : InnerS;
+ (*p).a1[uniforms.i] = v;
+}
+
+[[stage(compute), workgroup_size(1)]]
+fn main() {
+ var s1 : OuterS;
+ f(&s1);
+}
diff --git a/test/statements/assign/indexed_assign_to_array_in_struct/via_pointer_arg.wgsl.expected.hlsl b/test/statements/assign/indexed_assign_to_array_in_struct/via_pointer_arg.wgsl.expected.hlsl
new file mode 100644
index 0000000..bdaae4d
--- /dev/null
+++ b/test/statements/assign/indexed_assign_to_array_in_struct/via_pointer_arg.wgsl.expected.hlsl
@@ -0,0 +1,26 @@
+struct InnerS {
+ int v;
+};
+struct OuterS {
+ InnerS a1[8];
+};
+
+cbuffer cbuffer_uniforms : register(b4, space1) {
+ uint4 uniforms[1];
+};
+
+void f(inout OuterS p) {
+ InnerS v = (InnerS)0;
+ {
+ InnerS tint_symbol_1[8] = p.a1;
+ tint_symbol_1[uniforms[0].x] = v;
+ p.a1 = tint_symbol_1;
+ }
+}
+
+[numthreads(1, 1, 1)]
+void main() {
+ OuterS s1 = (OuterS)0;
+ f(s1);
+ return;
+}
diff --git a/test/vk-gl-cts/graphicsfuzz/arr-value-set-to-arr-value-squared/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/arr-value-set-to-arr-value-squared/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index ff5204b..0000000
--- a/test/vk-gl-cts/graphicsfuzz/arr-value-set-to-arr-value-squared/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,165 +0,0 @@
-SKIP: FAILED
-
-struct QuicksortObject {
- int numbers[10];
-};
-
-static QuicksortObject obj = (QuicksortObject)0;
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_30 : register(b0, space0) {
- uint4 x_30[1];
-};
-
-void swap_i1_i1_(inout int i, inout int j) {
- int temp = 0;
- const int x_92 = i;
- const int x_94 = obj.numbers[x_92];
- temp = x_94;
- const int x_95 = i;
- const int x_96 = j;
- const int x_98 = obj.numbers[x_96];
- obj.numbers[x_95] = x_98;
- const int x_100 = j;
- obj.numbers[x_100] = temp;
- return;
-}
-
-int performPartition_i1_i1_(inout int l, inout int h) {
- int pivot = 0;
- int i_1 = 0;
- int j_1 = 0;
- int param = 0;
- int param_1 = 0;
- int param_2 = 0;
- int param_3 = 0;
- const int x_104 = h;
- const int x_106 = obj.numbers[x_104];
- pivot = x_106;
- const int x_107 = l;
- i_1 = (x_107 - 1);
- const int x_109 = l;
- j_1 = x_109;
- [loop] while (true) {
- const int x_114 = j_1;
- const int x_115 = h;
- if ((x_114 <= (x_115 - 1))) {
- } else {
- break;
- }
- const int x_121 = obj.numbers[j_1];
- if ((x_121 <= pivot)) {
- i_1 = (i_1 + 1);
- param = i_1;
- param_1 = j_1;
- swap_i1_i1_(param, param_1);
- }
- {
- j_1 = (j_1 + 1);
- }
- }
- param_2 = (i_1 + 1);
- const int x_135 = h;
- param_3 = x_135;
- swap_i1_i1_(param_2, param_3);
- return (i_1 + 1);
-}
-
-void quicksort_() {
- int l_1 = 0;
- int h_1 = 0;
- int top = 0;
- int stack[10] = (int[10])0;
- int p = 0;
- int param_4 = 0;
- int param_5 = 0;
- l_1 = 0;
- h_1 = 9;
- top = -1;
- const int x_141 = (top + 1);
- top = x_141;
- stack[x_141] = l_1;
- const int x_145 = (top + 1);
- top = x_145;
- stack[x_145] = h_1;
- [loop] while (true) {
- if ((top >= 0)) {
- } else {
- break;
- }
- const int x_155 = top;
- top = (x_155 - 1);
- const int x_158 = stack[x_155];
- h_1 = x_158;
- const int x_159 = top;
- top = (x_159 - 1);
- const int x_162 = stack[x_159];
- l_1 = x_162;
- param_4 = l_1;
- param_5 = h_1;
- const int x_165 = performPartition_i1_i1_(param_4, param_5);
- p = x_165;
- if (((p - 1) > l_1)) {
- const int x_173 = (top + 1);
- top = x_173;
- stack[x_173] = l_1;
- const int x_177 = (top + 1);
- top = x_177;
- stack[x_177] = (p - 1);
- }
- if (((p + 1) < h_1)) {
- const int x_188 = (top + 1);
- top = x_188;
- stack[x_188] = (p + 1);
- const int x_193 = (top + 1);
- top = x_193;
- stack[x_193] = h_1;
- }
- }
- return;
-}
-
-void main_1() {
- int i_2 = 0;
- i_2 = 0;
- {
- [loop] for(; (i_2 < 10); i_2 = (i_2 + 1)) {
- obj.numbers[i_2] = (10 - i_2);
- const int x_71 = i_2;
- const int x_74 = obj.numbers[i_2];
- const int x_77 = obj.numbers[i_2];
- obj.numbers[x_71] = (x_74 * x_77);
- }
- }
- quicksort_();
- const int x_84 = obj.numbers[0];
- const int x_86 = obj.numbers[4];
- if ((x_84 < x_86)) {
- x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
- } else {
- x_GLF_color = float4(0.0f, 1.0f, 0.0f, 1.0f);
- }
- return;
-}
-
-struct main_out {
- float4 x_GLF_color_1;
-};
-struct tint_symbol {
- float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
- main_1();
- const main_out tint_symbol_1 = {x_GLF_color};
- return tint_symbol_1;
-}
-
-tint_symbol main() {
- const main_out inner_result = main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
- return wrapper_result;
-}
-C:\src\tint\test\Shader@0x00000246B5D89100(124,7-22): warning X3550: array reference cannot be used as an l-value; not natively addressable, forcing loop to unroll
-C:\src\tint\test\Shader@0x00000246B5D89100(123,12-45): error X3531: can't unroll loops marked with loop attribute
-
diff --git a/test/vk-gl-cts/graphicsfuzz/arr-value-set-to-arr-value-squared/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/arr-value-set-to-arr-value-squared/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index e0e6c28..0000000
--- a/test/vk-gl-cts/graphicsfuzz/arr-value-set-to-arr-value-squared/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,165 +0,0 @@
-SKIP: FAILED
-
-struct QuicksortObject {
- int numbers[10];
-};
-
-static QuicksortObject obj = (QuicksortObject)0;
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_30 : register(b0, space0) {
- uint4 x_30[1];
-};
-
-void swap_i1_i1_(inout int i, inout int j) {
- int temp = 0;
- const int x_92 = i;
- const int x_94 = obj.numbers[x_92];
- temp = x_94;
- const int x_95 = i;
- const int x_96 = j;
- const int x_98 = obj.numbers[x_96];
- obj.numbers[x_95] = x_98;
- const int x_100 = j;
- obj.numbers[x_100] = temp;
- return;
-}
-
-int performPartition_i1_i1_(inout int l, inout int h) {
- int pivot = 0;
- int i_1 = 0;
- int j_1 = 0;
- int param = 0;
- int param_1 = 0;
- int param_2 = 0;
- int param_3 = 0;
- const int x_104 = h;
- const int x_106 = obj.numbers[x_104];
- pivot = x_106;
- const int x_107 = l;
- i_1 = (x_107 - 1);
- const int x_109 = l;
- j_1 = x_109;
- [loop] while (true) {
- const int x_114 = j_1;
- const int x_115 = h;
- if ((x_114 <= (x_115 - 1))) {
- } else {
- break;
- }
- const int x_121 = obj.numbers[j_1];
- if ((x_121 <= pivot)) {
- i_1 = (i_1 + 1);
- param = i_1;
- param_1 = j_1;
- swap_i1_i1_(param, param_1);
- }
- {
- j_1 = (j_1 + 1);
- }
- }
- param_2 = (i_1 + 1);
- const int x_135 = h;
- param_3 = x_135;
- swap_i1_i1_(param_2, param_3);
- return (i_1 + 1);
-}
-
-void quicksort_() {
- int l_1 = 0;
- int h_1 = 0;
- int top = 0;
- int stack[10] = (int[10])0;
- int p = 0;
- int param_4 = 0;
- int param_5 = 0;
- l_1 = 0;
- h_1 = 9;
- top = -1;
- const int x_141 = (top + 1);
- top = x_141;
- stack[x_141] = l_1;
- const int x_145 = (top + 1);
- top = x_145;
- stack[x_145] = h_1;
- [loop] while (true) {
- if ((top >= 0)) {
- } else {
- break;
- }
- const int x_155 = top;
- top = (x_155 - 1);
- const int x_158 = stack[x_155];
- h_1 = x_158;
- const int x_159 = top;
- top = (x_159 - 1);
- const int x_162 = stack[x_159];
- l_1 = x_162;
- param_4 = l_1;
- param_5 = h_1;
- const int x_165 = performPartition_i1_i1_(param_4, param_5);
- p = x_165;
- if (((p - 1) > l_1)) {
- const int x_173 = (top + 1);
- top = x_173;
- stack[x_173] = l_1;
- const int x_177 = (top + 1);
- top = x_177;
- stack[x_177] = (p - 1);
- }
- if (((p + 1) < h_1)) {
- const int x_188 = (top + 1);
- top = x_188;
- stack[x_188] = (p + 1);
- const int x_193 = (top + 1);
- top = x_193;
- stack[x_193] = h_1;
- }
- }
- return;
-}
-
-void main_1() {
- int i_2 = 0;
- i_2 = 0;
- {
- [loop] for(; (i_2 < 10); i_2 = (i_2 + 1)) {
- obj.numbers[i_2] = (10 - i_2);
- const int x_71 = i_2;
- const int x_74 = obj.numbers[i_2];
- const int x_77 = obj.numbers[i_2];
- obj.numbers[x_71] = (x_74 * x_77);
- }
- }
- quicksort_();
- const int x_84 = obj.numbers[0];
- const int x_86 = obj.numbers[4];
- if ((x_84 < x_86)) {
- x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
- } else {
- x_GLF_color = float4(0.0f, 1.0f, 0.0f, 1.0f);
- }
- return;
-}
-
-struct main_out {
- float4 x_GLF_color_1;
-};
-struct tint_symbol {
- float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
- main_1();
- const main_out tint_symbol_1 = {x_GLF_color};
- return tint_symbol_1;
-}
-
-tint_symbol main() {
- const main_out inner_result = main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
- return wrapper_result;
-}
-C:\src\tint\test\Shader@0x000001BEDA24CD50(124,7-22): warning X3550: array reference cannot be used as an l-value; not natively addressable, forcing loop to unroll
-C:\src\tint\test\Shader@0x000001BEDA24CD50(123,12-45): error X3531: can't unroll loops marked with loop attribute
-
diff --git a/test/vk-gl-cts/graphicsfuzz/color-set-in-for-loop/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/color-set-in-for-loop/0-opt.spvasm.expected.hlsl
index 206ce4b..9de3ba3 100755
--- a/test/vk-gl-cts/graphicsfuzz/color-set-in-for-loop/0-opt.spvasm.expected.hlsl
+++ b/test/vk-gl-cts/graphicsfuzz/color-set-in-for-loop/0-opt.spvasm.expected.hlsl
Binary files differ
diff --git a/test/vk-gl-cts/graphicsfuzz/color-set-in-for-loop/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/color-set-in-for-loop/0-opt.wgsl.expected.hlsl
index cc278fa..139e7dc 100755
--- a/test/vk-gl-cts/graphicsfuzz/color-set-in-for-loop/0-opt.wgsl.expected.hlsl
+++ b/test/vk-gl-cts/graphicsfuzz/color-set-in-for-loop/0-opt.wgsl.expected.hlsl
Binary files differ
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-copy-prop-arrays-no-stores/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-copy-prop-arrays-no-stores/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index be9d33f..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-copy-prop-arrays-no-stores/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,49 +0,0 @@
-SKIP: FAILED
-
-struct Array {
- int values[2];
-};
-
-cbuffer cbuffer_x_7 : register(b0, space0) {
- uint4 x_7[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
- Array a = (Array)0;
- Array b = (Array)0;
- float one = 0.0f;
- const int x_10 = asint(x_7[0].x);
- a.values[x_10] = 1;
- b = a;
- one = 0.0f;
- const int x_11 = asint(x_7[0].x);
- const int x_12 = b.values[x_11];
- if ((x_12 == 1)) {
- one = 1.0f;
- }
- x_GLF_color = float4(one, 0.0f, 0.0f, 1.0f);
- return;
-}
-
-struct main_out {
- float4 x_GLF_color_1;
-};
-struct tint_symbol {
- float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
- main_1();
- const main_out tint_symbol_2 = {x_GLF_color};
- return tint_symbol_2;
-}
-
-tint_symbol main() {
- const main_out inner_result = main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
- return wrapper_result;
-}
-C:\src\tint\test\Shader@0x0000026DA3D26220(15,3-16): error X3500: array reference cannot be used as an l-value; not natively addressable
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-copy-prop-arrays-no-stores/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-copy-prop-arrays-no-stores/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index db056c7..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-copy-prop-arrays-no-stores/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,49 +0,0 @@
-SKIP: FAILED
-
-struct Array {
- int values[2];
-};
-
-cbuffer cbuffer_x_7 : register(b0, space0) {
- uint4 x_7[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
- Array a = (Array)0;
- Array b = (Array)0;
- float one = 0.0f;
- const int x_10 = asint(x_7[0].x);
- a.values[x_10] = 1;
- b = a;
- one = 0.0f;
- const int x_11 = asint(x_7[0].x);
- const int x_12 = b.values[x_11];
- if ((x_12 == 1)) {
- one = 1.0f;
- }
- x_GLF_color = float4(one, 0.0f, 0.0f, 1.0f);
- return;
-}
-
-struct main_out {
- float4 x_GLF_color_1;
-};
-struct tint_symbol {
- float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
- main_1();
- const main_out tint_symbol_2 = {x_GLF_color};
- return tint_symbol_2;
-}
-
-tint_symbol main() {
- const main_out inner_result = main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
- return wrapper_result;
-}
-C:\src\tint\test\Shader@0x0000024C52B7BDB0(15,3-16): error X3500: array reference cannot be used as an l-value; not natively addressable
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-dead-code-unreachable-merge/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-dead-code-unreachable-merge/0-opt.spvasm.expected.hlsl
index 281f92d..fbd491a 100755
--- a/test/vk-gl-cts/graphicsfuzz/cov-dead-code-unreachable-merge/0-opt.spvasm.expected.hlsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-dead-code-unreachable-merge/0-opt.spvasm.expected.hlsl
Binary files differ
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-dead-code-unreachable-merge/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-dead-code-unreachable-merge/0-opt.wgsl.expected.hlsl
index a4a3eae..8eaa7c8 100755
--- a/test/vk-gl-cts/graphicsfuzz/cov-dead-code-unreachable-merge/0-opt.wgsl.expected.hlsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-dead-code-unreachable-merge/0-opt.wgsl.expected.hlsl
Binary files differ
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-struct-float-array-mix-uniform-vectors/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-struct-float-array-mix-uniform-vectors/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index f9ef66b..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-struct-float-array-mix-uniform-vectors/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,94 +0,0 @@
-SKIP: FAILED
-
-struct S {
- float numbers[3];
-};
-
-cbuffer cbuffer_x_7 : register(b1, space0) {
- uint4 x_7[5];
-};
-cbuffer cbuffer_x_9 : register(b2, space0) {
- uint4 x_9[1];
-};
-cbuffer cbuffer_x_12 : register(b3, space0) {
- uint4 x_12[1];
-};
-cbuffer cbuffer_x_15 : register(b0, space0) {
- uint4 x_15[2];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
- S obj = (S)0;
- float a = 0.0f;
- float2 x_49 = float2(0.0f, 0.0f);
- float b = 0.0f;
- const float x_51 = asfloat(x_7[3].x);
- const float x_53 = asfloat(x_7[2].x);
- const float x_55 = asfloat(x_7[4].x);
- const float tint_symbol_6[3] = {x_51, x_53, x_55};
- const S tint_symbol_7 = {tint_symbol_6};
- obj = tint_symbol_7;
- const float x_59 = asfloat(x_9[0].x);
- const uint scalar_offset = ((16u * uint(0))) / 4;
- const float x_62 = asfloat(x_7[scalar_offset / 4][scalar_offset % 4]);
- obj.numbers[int(x_59)] = x_62;
- const float x_65 = asfloat(x_9[0].x);
- const uint scalar_offset_1 = ((16u * uint(0))) / 4;
- const float x_67 = asfloat(x_7[scalar_offset_1 / 4][scalar_offset_1 % 4]);
- if ((x_65 > x_67)) {
- const float2 x_73 = asfloat(x_9[0].xy);
- x_49 = x_73;
- } else {
- const float2 x_75 = asfloat(x_12[0].xy);
- x_49 = x_75;
- }
- const float x_77 = x_49.y;
- a = x_77;
- const uint scalar_offset_2 = ((16u * uint(0))) / 4;
- const float x_79 = asfloat(x_7[scalar_offset_2 / 4][scalar_offset_2 % 4]);
- const float x_80 = a;
- const uint scalar_offset_3 = ((16u * uint(0))) / 4;
- const int x_82 = asint(x_15[scalar_offset_3 / 4][scalar_offset_3 % 4]);
- const float x_84 = obj.numbers[x_82];
- b = lerp(x_79, x_80, x_84);
- const float x_86 = b;
- const float x_88 = asfloat(x_7[2].x);
- const float x_91 = asfloat(x_7[1].x);
- if ((distance(x_86, x_88) < x_91)) {
- const uint scalar_offset_4 = ((16u * uint(0))) / 4;
- const int x_97 = asint(x_15[scalar_offset_4 / 4][scalar_offset_4 % 4]);
- const int x_100 = asint(x_15[1].x);
- const int x_103 = asint(x_15[1].x);
- const uint scalar_offset_5 = ((16u * uint(0))) / 4;
- const int x_106 = asint(x_15[scalar_offset_5 / 4][scalar_offset_5 % 4]);
- x_GLF_color = float4(float(x_97), float(x_100), float(x_103), float(x_106));
- } else {
- const int x_110 = asint(x_15[1].x);
- const float x_111 = float(x_110);
- x_GLF_color = float4(x_111, x_111, x_111, x_111);
- }
- return;
-}
-
-struct main_out {
- float4 x_GLF_color_1;
-};
-struct tint_symbol {
- float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
- main_1();
- const main_out tint_symbol_8 = {x_GLF_color};
- return tint_symbol_8;
-}
-
-tint_symbol main() {
- const main_out inner_result = main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
- return wrapper_result;
-}
-C:\src\tint\test\Shader@0x0000018BDF85D170(33,3-24): error X3500: array reference cannot be used as an l-value; not natively addressable
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-struct-float-array-mix-uniform-vectors/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-struct-float-array-mix-uniform-vectors/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index 1457ead..0000000
--- a/test/vk-gl-cts/graphicsfuzz/cov-struct-float-array-mix-uniform-vectors/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,94 +0,0 @@
-SKIP: FAILED
-
-struct S {
- float numbers[3];
-};
-
-cbuffer cbuffer_x_7 : register(b1, space0) {
- uint4 x_7[5];
-};
-cbuffer cbuffer_x_9 : register(b2, space0) {
- uint4 x_9[1];
-};
-cbuffer cbuffer_x_12 : register(b3, space0) {
- uint4 x_12[1];
-};
-cbuffer cbuffer_x_15 : register(b0, space0) {
- uint4 x_15[2];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
- S obj = (S)0;
- float a = 0.0f;
- float2 x_49 = float2(0.0f, 0.0f);
- float b = 0.0f;
- const float x_51 = asfloat(x_7[3].x);
- const float x_53 = asfloat(x_7[2].x);
- const float x_55 = asfloat(x_7[4].x);
- const float tint_symbol_6[3] = {x_51, x_53, x_55};
- const S tint_symbol_7 = {tint_symbol_6};
- obj = tint_symbol_7;
- const float x_59 = asfloat(x_9[0].x);
- const uint scalar_offset = ((16u * uint(0))) / 4;
- const float x_62 = asfloat(x_7[scalar_offset / 4][scalar_offset % 4]);
- obj.numbers[int(x_59)] = x_62;
- const float x_65 = asfloat(x_9[0].x);
- const uint scalar_offset_1 = ((16u * uint(0))) / 4;
- const float x_67 = asfloat(x_7[scalar_offset_1 / 4][scalar_offset_1 % 4]);
- if ((x_65 > x_67)) {
- const float2 x_73 = asfloat(x_9[0].xy);
- x_49 = x_73;
- } else {
- const float2 x_75 = asfloat(x_12[0].xy);
- x_49 = x_75;
- }
- const float x_77 = x_49.y;
- a = x_77;
- const uint scalar_offset_2 = ((16u * uint(0))) / 4;
- const float x_79 = asfloat(x_7[scalar_offset_2 / 4][scalar_offset_2 % 4]);
- const float x_80 = a;
- const uint scalar_offset_3 = ((16u * uint(0))) / 4;
- const int x_82 = asint(x_15[scalar_offset_3 / 4][scalar_offset_3 % 4]);
- const float x_84 = obj.numbers[x_82];
- b = lerp(x_79, x_80, x_84);
- const float x_86 = b;
- const float x_88 = asfloat(x_7[2].x);
- const float x_91 = asfloat(x_7[1].x);
- if ((distance(x_86, x_88) < x_91)) {
- const uint scalar_offset_4 = ((16u * uint(0))) / 4;
- const int x_97 = asint(x_15[scalar_offset_4 / 4][scalar_offset_4 % 4]);
- const int x_100 = asint(x_15[1].x);
- const int x_103 = asint(x_15[1].x);
- const uint scalar_offset_5 = ((16u * uint(0))) / 4;
- const int x_106 = asint(x_15[scalar_offset_5 / 4][scalar_offset_5 % 4]);
- x_GLF_color = float4(float(x_97), float(x_100), float(x_103), float(x_106));
- } else {
- const int x_110 = asint(x_15[1].x);
- const float x_111 = float(x_110);
- x_GLF_color = float4(x_111, x_111, x_111, x_111);
- }
- return;
-}
-
-struct main_out {
- float4 x_GLF_color_1;
-};
-struct tint_symbol {
- float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
- main_1();
- const main_out tint_symbol_8 = {x_GLF_color};
- return tint_symbol_8;
-}
-
-tint_symbol main() {
- const main_out inner_result = main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
- return wrapper_result;
-}
-C:\src\tint\test\Shader@0x00000172CC1515F0(33,3-24): error X3500: array reference cannot be used as an l-value; not natively addressable
-
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-tail-duplicator-infinite-loops/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-tail-duplicator-infinite-loops/0-opt.spvasm.expected.hlsl
index 7d32166..4317cbe 100755
--- a/test/vk-gl-cts/graphicsfuzz/cov-tail-duplicator-infinite-loops/0-opt.spvasm.expected.hlsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-tail-duplicator-infinite-loops/0-opt.spvasm.expected.hlsl
Binary files differ
diff --git a/test/vk-gl-cts/graphicsfuzz/cov-tail-duplicator-infinite-loops/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/cov-tail-duplicator-infinite-loops/0-opt.wgsl.expected.hlsl
index c6eed98..4f9ecd6 100755
--- a/test/vk-gl-cts/graphicsfuzz/cov-tail-duplicator-infinite-loops/0-opt.wgsl.expected.hlsl
+++ b/test/vk-gl-cts/graphicsfuzz/cov-tail-duplicator-infinite-loops/0-opt.wgsl.expected.hlsl
Binary files differ
diff --git a/test/vk-gl-cts/graphicsfuzz/function-with-uniform-return/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/function-with-uniform-return/0-opt.spvasm.expected.hlsl
index d1579f5..232826e 100755
--- a/test/vk-gl-cts/graphicsfuzz/function-with-uniform-return/0-opt.spvasm.expected.hlsl
+++ b/test/vk-gl-cts/graphicsfuzz/function-with-uniform-return/0-opt.spvasm.expected.hlsl
Binary files differ
diff --git a/test/vk-gl-cts/graphicsfuzz/function-with-uniform-return/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/function-with-uniform-return/0-opt.wgsl.expected.hlsl
index e99e9c1..52d72d6 100755
--- a/test/vk-gl-cts/graphicsfuzz/function-with-uniform-return/0-opt.wgsl.expected.hlsl
+++ b/test/vk-gl-cts/graphicsfuzz/function-with-uniform-return/0-opt.wgsl.expected.hlsl
Binary files differ
diff --git a/test/vk-gl-cts/graphicsfuzz/loops-ifs-continues-call/0.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/loops-ifs-continues-call/0.spvasm.expected.hlsl
deleted file mode 100644
index 3b9109c..0000000
--- a/test/vk-gl-cts/graphicsfuzz/loops-ifs-continues-call/0.spvasm.expected.hlsl
+++ /dev/null
@@ -1,93 +0,0 @@
-SKIP: FAILED
-
-struct BinarySearchObject {
- int prime_numbers[10];
-};
-
-cbuffer cbuffer_x_8 : register(b0, space0) {
- uint4 x_8[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-int binarySearch_struct_BinarySearchObject_i1_10_1_(inout BinarySearchObject obj) {
- int m = 0;
- [loop] while (true) {
- const float x_91 = asfloat(x_8[0].x);
- if ((x_91 > 1.0f)) {
- } else {
- break;
- }
- const float x_95 = asfloat(x_8[0].x);
- m = int(x_95);
- const int x_15 = obj.prime_numbers[m];
- if ((x_15 == 1)) {
- return 1;
- }
- }
- return 1;
-}
-
-void main_1() {
- int i = 0;
- BinarySearchObject obj_1 = (BinarySearchObject)0;
- BinarySearchObject param = (BinarySearchObject)0;
- i = 0;
- {
- [loop] for(; (i < 10); i = (i + 1)) {
- if ((i != 3)) {
- const int x_18 = i;
- const float x_67 = asfloat(x_8[0].x);
- if (((x_18 - int(x_67)) == 4)) {
- obj_1.prime_numbers[i] = 11;
- } else {
- if ((i == 6)) {
- obj_1.prime_numbers[i] = 17;
- }
- continue;
- }
- }
- [loop] while (true) {
- {
- const float x_82 = asfloat(x_8[0].y);
- if ((0.0f > x_82)) {
- } else {
- break;
- }
- }
- }
- }
- }
- param = obj_1;
- const int x_26 = binarySearch_struct_BinarySearchObject_i1_10_1_(param);
- x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
- return;
-}
-
-struct main_out {
- float4 x_GLF_color_1;
-};
-struct tint_symbol {
- float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
- main_1();
- const main_out tint_symbol_2 = {x_GLF_color};
- return tint_symbol_2;
-}
-
-tint_symbol main() {
- const main_out inner_result = main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
- return wrapper_result;
-}
-C:\src\tint\test\Shader@0x0000016C5E617FA0(47,14-25): warning X3557: loop doesn't seem to do anything, consider removing [loop]
-C:\src\tint\test\Shader@0x0000016C5E617FA0(47,14-25): warning X3551: infinite loop detected - loop writes no values
-C:\src\tint\test\Shader@0x0000016C5E617FA0(47,14-25): warning X3557: loop doesn't seem to do anything, consider removing [loop]
-C:\src\tint\test\Shader@0x0000016C5E617FA0(47,14-25): warning X3551: infinite loop detected - loop writes no values
-C:\src\tint\test\Shader@0x0000016C5E617FA0(47,14-25): warning X3557: loop doesn't seem to do anything, consider removing [loop]
-C:\src\tint\test\Shader@0x0000016C5E617FA0(47,14-25): warning X3551: infinite loop detected - loop writes no values
-C:\src\tint\test\Shader@0x0000016C5E617FA0(39,11-32): warning X3550: array reference cannot be used as an l-value; not natively addressable, forcing loop to unroll
-C:\src\tint\test\Shader@0x0000016C5E617FA0(34,12-39): error X3531: can't unroll loops marked with loop attribute
-
diff --git a/test/vk-gl-cts/graphicsfuzz/loops-ifs-continues-call/0.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/loops-ifs-continues-call/0.wgsl.expected.hlsl
deleted file mode 100644
index 3c9719c..0000000
--- a/test/vk-gl-cts/graphicsfuzz/loops-ifs-continues-call/0.wgsl.expected.hlsl
+++ /dev/null
@@ -1,93 +0,0 @@
-SKIP: FAILED
-
-struct BinarySearchObject {
- int prime_numbers[10];
-};
-
-cbuffer cbuffer_x_8 : register(b0, space0) {
- uint4 x_8[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-int binarySearch_struct_BinarySearchObject_i1_10_1_(inout BinarySearchObject obj) {
- int m = 0;
- [loop] while (true) {
- const float x_91 = asfloat(x_8[0].x);
- if ((x_91 > 1.0f)) {
- } else {
- break;
- }
- const float x_95 = asfloat(x_8[0].x);
- m = int(x_95);
- const int x_15 = obj.prime_numbers[m];
- if ((x_15 == 1)) {
- return 1;
- }
- }
- return 1;
-}
-
-void main_1() {
- int i = 0;
- BinarySearchObject obj_1 = (BinarySearchObject)0;
- BinarySearchObject param = (BinarySearchObject)0;
- i = 0;
- {
- [loop] for(; (i < 10); i = (i + 1)) {
- if ((i != 3)) {
- const int x_18 = i;
- const float x_67 = asfloat(x_8[0].x);
- if (((x_18 - int(x_67)) == 4)) {
- obj_1.prime_numbers[i] = 11;
- } else {
- if ((i == 6)) {
- obj_1.prime_numbers[i] = 17;
- }
- continue;
- }
- }
- [loop] while (true) {
- {
- const float x_82 = asfloat(x_8[0].y);
- if ((0.0f > x_82)) {
- } else {
- break;
- }
- }
- }
- }
- }
- param = obj_1;
- const int x_26 = binarySearch_struct_BinarySearchObject_i1_10_1_(param);
- x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
- return;
-}
-
-struct main_out {
- float4 x_GLF_color_1;
-};
-struct tint_symbol {
- float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner() {
- main_1();
- const main_out tint_symbol_2 = {x_GLF_color};
- return tint_symbol_2;
-}
-
-tint_symbol main() {
- const main_out inner_result = main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
- wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
- return wrapper_result;
-}
-C:\src\tint\test\Shader@0x0000022E4AE186A0(47,14-25): warning X3557: loop doesn't seem to do anything, consider removing [loop]
-C:\src\tint\test\Shader@0x0000022E4AE186A0(47,14-25): warning X3551: infinite loop detected - loop writes no values
-C:\src\tint\test\Shader@0x0000022E4AE186A0(47,14-25): warning X3557: loop doesn't seem to do anything, consider removing [loop]
-C:\src\tint\test\Shader@0x0000022E4AE186A0(47,14-25): warning X3551: infinite loop detected - loop writes no values
-C:\src\tint\test\Shader@0x0000022E4AE186A0(47,14-25): warning X3557: loop doesn't seem to do anything, consider removing [loop]
-C:\src\tint\test\Shader@0x0000022E4AE186A0(47,14-25): warning X3551: infinite loop detected - loop writes no values
-C:\src\tint\test\Shader@0x0000022E4AE186A0(39,11-32): warning X3550: array reference cannot be used as an l-value; not natively addressable, forcing loop to unroll
-C:\src\tint\test\Shader@0x0000022E4AE186A0(34,12-39): error X3531: can't unroll loops marked with loop attribute
-
diff --git a/test/vk-gl-cts/graphicsfuzz/returned-boolean-in-vector/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/returned-boolean-in-vector/0-opt.spvasm.expected.hlsl
index 9c26cbb..7dc5ef7 100755
--- a/test/vk-gl-cts/graphicsfuzz/returned-boolean-in-vector/0-opt.spvasm.expected.hlsl
+++ b/test/vk-gl-cts/graphicsfuzz/returned-boolean-in-vector/0-opt.spvasm.expected.hlsl
@@ -115,3 +115,5 @@
wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
return wrapper_result;
}
+Internal compiler error: access violation. Attempted to read from address 0x0000000000000048
+
diff --git a/test/vk-gl-cts/graphicsfuzz/returned-boolean-in-vector/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/returned-boolean-in-vector/0-opt.wgsl.expected.hlsl
index 9c26cbb..7dc5ef7 100755
--- a/test/vk-gl-cts/graphicsfuzz/returned-boolean-in-vector/0-opt.wgsl.expected.hlsl
+++ b/test/vk-gl-cts/graphicsfuzz/returned-boolean-in-vector/0-opt.wgsl.expected.hlsl
@@ -115,3 +115,5 @@
wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
return wrapper_result;
}
+Internal compiler error: access violation. Attempted to read from address 0x0000000000000048
+
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-quicksort-dontinline/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/spv-stable-quicksort-dontinline/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index cd7206e..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-quicksort-dontinline/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,224 +0,0 @@
-SKIP: FAILED
-
-struct QuicksortObject {
- int numbers[10];
-};
-
-static QuicksortObject obj = (QuicksortObject)0;
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_32 : register(b0, space0) {
- uint4 x_32[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void swap_i1_i1_(inout int i, inout int j) {
- int temp = 0;
- const int x_225 = i;
- const int x_227 = obj.numbers[x_225];
- temp = x_227;
- const int x_228 = i;
- const int x_229 = j;
- const int x_231 = obj.numbers[x_229];
- obj.numbers[x_228] = x_231;
- const int x_233 = j;
- obj.numbers[x_233] = temp;
- return;
-}
-
-int performPartition_i1_i1_(inout int l, inout int h) {
- int pivot = 0;
- int i_1 = 0;
- int j_1 = 0;
- int param = 0;
- int param_1 = 0;
- int param_2 = 0;
- int param_3 = 0;
- const int x_237 = h;
- const int x_239 = obj.numbers[x_237];
- pivot = x_239;
- const int x_240 = l;
- i_1 = (x_240 - 1);
- const int x_242 = l;
- j_1 = x_242;
- [loop] while (true) {
- const int x_247 = j_1;
- const int x_248 = h;
- if ((x_247 <= (x_248 - 1))) {
- } else {
- break;
- }
- const int x_254 = obj.numbers[j_1];
- if ((x_254 <= pivot)) {
- i_1 = (i_1 + 1);
- param = i_1;
- param_1 = j_1;
- swap_i1_i1_(param, param_1);
- }
- {
- j_1 = (j_1 + 1);
- }
- }
- i_1 = (i_1 + 1);
- param_2 = i_1;
- const int x_269 = h;
- param_3 = x_269;
- swap_i1_i1_(param_2, param_3);
- return i_1;
-}
-
-void quicksort_() {
- int l_1 = 0;
- int h_1 = 0;
- int top = 0;
- int stack[10] = (int[10])0;
- int p = 0;
- int param_4 = 0;
- int param_5 = 0;
- l_1 = 0;
- h_1 = 9;
- top = -1;
- const int x_274 = (top + 1);
- top = x_274;
- stack[x_274] = l_1;
- const int x_278 = (top + 1);
- top = x_278;
- stack[x_278] = h_1;
- [loop] while (true) {
- if ((top >= 0)) {
- } else {
- break;
- }
- const int x_288 = top;
- top = (x_288 - 1);
- const int x_291 = stack[x_288];
- h_1 = x_291;
- const int x_292 = top;
- top = (x_292 - 1);
- const int x_295 = stack[x_292];
- l_1 = x_295;
- param_4 = l_1;
- param_5 = h_1;
- const int x_298 = performPartition_i1_i1_(param_4, param_5);
- p = x_298;
- if (((p - 1) > l_1)) {
- const int x_306 = (top + 1);
- top = x_306;
- stack[x_306] = l_1;
- const int x_310 = (top + 1);
- top = x_310;
- stack[x_310] = (p - 1);
- }
- if (((p + 1) < h_1)) {
- const int x_321 = (top + 1);
- top = x_321;
- stack[x_321] = (p + 1);
- const int x_326 = (top + 1);
- top = x_326;
- stack[x_326] = h_1;
- }
- }
- return;
-}
-
-void main_1() {
- int i_2 = 0;
- float2 uv = float2(0.0f, 0.0f);
- float3 color = float3(0.0f, 0.0f, 0.0f);
- i_2 = 0;
- {
- [loop] for(; (i_2 < 10); i_2 = (i_2 + 1)) {
- obj.numbers[i_2] = (10 - i_2);
- const int x_92 = i_2;
- const int x_95 = obj.numbers[i_2];
- const int x_98 = obj.numbers[i_2];
- obj.numbers[x_92] = (x_95 * x_98);
- }
- }
- quicksort_();
- const float4 x_104 = gl_FragCoord;
- const float2 x_107 = asfloat(x_32[0].xy);
- uv = (float2(x_104.x, x_104.y) / x_107);
- color = float3(1.0f, 2.0f, 3.0f);
- const int x_110 = obj.numbers[0];
- const float x_113 = color.x;
- color.x = (x_113 + float(x_110));
- const float x_117 = uv.x;
- if ((x_117 > 0.25f)) {
- const int x_122 = obj.numbers[1];
- const float x_125 = color.x;
- color.x = (x_125 + float(x_122));
- }
- const float x_129 = uv.x;
- if ((x_129 > 0.5f)) {
- const int x_134 = obj.numbers[2];
- const float x_137 = color.y;
- color.y = (x_137 + float(x_134));
- }
- const float x_141 = uv.x;
- if ((x_141 > 0.75f)) {
- const int x_146 = obj.numbers[3];
- const float x_149 = color.z;
- color.z = (x_149 + float(x_146));
- }
- const int x_153 = obj.numbers[4];
- const float x_156 = color.y;
- color.y = (x_156 + float(x_153));
- const float x_160 = uv.y;
- if ((x_160 > 0.25f)) {
- const int x_165 = obj.numbers[5];
- const float x_168 = color.x;
- color.x = (x_168 + float(x_165));
- }
- const float x_172 = uv.y;
- if ((x_172 > 0.5f)) {
- const int x_177 = obj.numbers[6];
- const float x_180 = color.y;
- color.y = (x_180 + float(x_177));
- }
- const float x_184 = uv.y;
- if ((x_184 > 0.75f)) {
- const int x_189 = obj.numbers[7];
- const float x_192 = color.z;
- color.z = (x_192 + float(x_189));
- }
- const int x_196 = obj.numbers[8];
- const float x_199 = color.z;
- color.z = (x_199 + float(x_196));
- const float x_203 = uv.x;
- const float x_205 = uv.y;
- if ((abs((x_203 - x_205)) < 0.25f)) {
- const int x_212 = obj.numbers[9];
- const float x_215 = color.x;
- color.x = (x_215 + float(x_212));
- }
- const float3 x_219 = normalize(color);
- x_GLF_color = float4(x_219.x, x_219.y, x_219.z, 1.0f);
- return;
-}
-
-struct main_out {
- float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
- float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
- float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
- gl_FragCoord = gl_FragCoord_param;
- main_1();
- const main_out tint_symbol_4 = {x_GLF_color};
- return tint_symbol_4;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
- const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
- tint_symbol_2 wrapper_result = (tint_symbol_2)0;
- wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
- return wrapper_result;
-}
-C:\src\tint\test\Shader@0x000001609F0E92A0(128,7-22): warning X3550: array reference cannot be used as an l-value; not natively addressable, forcing loop to unroll
-C:\src\tint\test\Shader@0x000001609F0E92A0(127,12-45): error X3531: can't unroll loops marked with loop attribute
-
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-quicksort-dontinline/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/spv-stable-quicksort-dontinline/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index 0f29d11..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-quicksort-dontinline/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,224 +0,0 @@
-SKIP: FAILED
-
-struct QuicksortObject {
- int numbers[10];
-};
-
-static QuicksortObject obj = (QuicksortObject)0;
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_32 : register(b0, space0) {
- uint4 x_32[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void swap_i1_i1_(inout int i, inout int j) {
- int temp = 0;
- const int x_225 = i;
- const int x_227 = obj.numbers[x_225];
- temp = x_227;
- const int x_228 = i;
- const int x_229 = j;
- const int x_231 = obj.numbers[x_229];
- obj.numbers[x_228] = x_231;
- const int x_233 = j;
- obj.numbers[x_233] = temp;
- return;
-}
-
-int performPartition_i1_i1_(inout int l, inout int h) {
- int pivot = 0;
- int i_1 = 0;
- int j_1 = 0;
- int param = 0;
- int param_1 = 0;
- int param_2 = 0;
- int param_3 = 0;
- const int x_237 = h;
- const int x_239 = obj.numbers[x_237];
- pivot = x_239;
- const int x_240 = l;
- i_1 = (x_240 - 1);
- const int x_242 = l;
- j_1 = x_242;
- [loop] while (true) {
- const int x_247 = j_1;
- const int x_248 = h;
- if ((x_247 <= (x_248 - 1))) {
- } else {
- break;
- }
- const int x_254 = obj.numbers[j_1];
- if ((x_254 <= pivot)) {
- i_1 = (i_1 + 1);
- param = i_1;
- param_1 = j_1;
- swap_i1_i1_(param, param_1);
- }
- {
- j_1 = (j_1 + 1);
- }
- }
- i_1 = (i_1 + 1);
- param_2 = i_1;
- const int x_269 = h;
- param_3 = x_269;
- swap_i1_i1_(param_2, param_3);
- return i_1;
-}
-
-void quicksort_() {
- int l_1 = 0;
- int h_1 = 0;
- int top = 0;
- int stack[10] = (int[10])0;
- int p = 0;
- int param_4 = 0;
- int param_5 = 0;
- l_1 = 0;
- h_1 = 9;
- top = -1;
- const int x_274 = (top + 1);
- top = x_274;
- stack[x_274] = l_1;
- const int x_278 = (top + 1);
- top = x_278;
- stack[x_278] = h_1;
- [loop] while (true) {
- if ((top >= 0)) {
- } else {
- break;
- }
- const int x_288 = top;
- top = (x_288 - 1);
- const int x_291 = stack[x_288];
- h_1 = x_291;
- const int x_292 = top;
- top = (x_292 - 1);
- const int x_295 = stack[x_292];
- l_1 = x_295;
- param_4 = l_1;
- param_5 = h_1;
- const int x_298 = performPartition_i1_i1_(param_4, param_5);
- p = x_298;
- if (((p - 1) > l_1)) {
- const int x_306 = (top + 1);
- top = x_306;
- stack[x_306] = l_1;
- const int x_310 = (top + 1);
- top = x_310;
- stack[x_310] = (p - 1);
- }
- if (((p + 1) < h_1)) {
- const int x_321 = (top + 1);
- top = x_321;
- stack[x_321] = (p + 1);
- const int x_326 = (top + 1);
- top = x_326;
- stack[x_326] = h_1;
- }
- }
- return;
-}
-
-void main_1() {
- int i_2 = 0;
- float2 uv = float2(0.0f, 0.0f);
- float3 color = float3(0.0f, 0.0f, 0.0f);
- i_2 = 0;
- {
- [loop] for(; (i_2 < 10); i_2 = (i_2 + 1)) {
- obj.numbers[i_2] = (10 - i_2);
- const int x_92 = i_2;
- const int x_95 = obj.numbers[i_2];
- const int x_98 = obj.numbers[i_2];
- obj.numbers[x_92] = (x_95 * x_98);
- }
- }
- quicksort_();
- const float4 x_104 = gl_FragCoord;
- const float2 x_107 = asfloat(x_32[0].xy);
- uv = (float2(x_104.x, x_104.y) / x_107);
- color = float3(1.0f, 2.0f, 3.0f);
- const int x_110 = obj.numbers[0];
- const float x_113 = color.x;
- color.x = (x_113 + float(x_110));
- const float x_117 = uv.x;
- if ((x_117 > 0.25f)) {
- const int x_122 = obj.numbers[1];
- const float x_125 = color.x;
- color.x = (x_125 + float(x_122));
- }
- const float x_129 = uv.x;
- if ((x_129 > 0.5f)) {
- const int x_134 = obj.numbers[2];
- const float x_137 = color.y;
- color.y = (x_137 + float(x_134));
- }
- const float x_141 = uv.x;
- if ((x_141 > 0.75f)) {
- const int x_146 = obj.numbers[3];
- const float x_149 = color.z;
- color.z = (x_149 + float(x_146));
- }
- const int x_153 = obj.numbers[4];
- const float x_156 = color.y;
- color.y = (x_156 + float(x_153));
- const float x_160 = uv.y;
- if ((x_160 > 0.25f)) {
- const int x_165 = obj.numbers[5];
- const float x_168 = color.x;
- color.x = (x_168 + float(x_165));
- }
- const float x_172 = uv.y;
- if ((x_172 > 0.5f)) {
- const int x_177 = obj.numbers[6];
- const float x_180 = color.y;
- color.y = (x_180 + float(x_177));
- }
- const float x_184 = uv.y;
- if ((x_184 > 0.75f)) {
- const int x_189 = obj.numbers[7];
- const float x_192 = color.z;
- color.z = (x_192 + float(x_189));
- }
- const int x_196 = obj.numbers[8];
- const float x_199 = color.z;
- color.z = (x_199 + float(x_196));
- const float x_203 = uv.x;
- const float x_205 = uv.y;
- if ((abs((x_203 - x_205)) < 0.25f)) {
- const int x_212 = obj.numbers[9];
- const float x_215 = color.x;
- color.x = (x_215 + float(x_212));
- }
- const float3 x_219 = normalize(color);
- x_GLF_color = float4(x_219.x, x_219.y, x_219.z, 1.0f);
- return;
-}
-
-struct main_out {
- float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
- float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
- float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
- gl_FragCoord = gl_FragCoord_param;
- main_1();
- const main_out tint_symbol_4 = {x_GLF_color};
- return tint_symbol_4;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
- const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
- tint_symbol_2 wrapper_result = (tint_symbol_2)0;
- wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
- return wrapper_result;
-}
-C:\src\tint\test\Shader@0x00000219A1C1C120(128,7-22): warning X3550: array reference cannot be used as an l-value; not natively addressable, forcing loop to unroll
-C:\src\tint\test\Shader@0x00000219A1C1C120(127,12-45): error X3531: can't unroll loops marked with loop attribute
-
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-quicksort-mat-func-param/1.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/spv-stable-quicksort-mat-func-param/1.spvasm.expected.hlsl
deleted file mode 100644
index fb3266e..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-quicksort-mat-func-param/1.spvasm.expected.hlsl
+++ /dev/null
@@ -1,224 +0,0 @@
-SKIP: FAILED
-
-struct QuicksortObject {
- int numbers[10];
-};
-
-static QuicksortObject obj = (QuicksortObject)0;
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_32 : register(b0, space0) {
- uint4 x_32[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void swap_i1_i1_(inout int i, inout int j, float3x3 x_228) {
- int temp = 0;
- const int x_230 = i;
- const int x_232 = obj.numbers[x_230];
- temp = x_232;
- const int x_233 = i;
- const int x_234 = j;
- const int x_236 = obj.numbers[x_234];
- obj.numbers[x_233] = x_236;
- const int x_238 = j;
- obj.numbers[x_238] = temp;
- return;
-}
-
-int performPartition_i1_i1_(inout int l, inout int h) {
- int pivot = 0;
- int i_1 = 0;
- int j_1 = 0;
- int param = 0;
- int param_1 = 0;
- int param_2 = 0;
- int param_3 = 0;
- const int x_242 = h;
- const int x_244 = obj.numbers[x_242];
- pivot = x_244;
- const int x_245 = l;
- i_1 = (x_245 - 1);
- const int x_247 = l;
- j_1 = x_247;
- [loop] while (true) {
- const int x_252 = j_1;
- const int x_253 = h;
- if ((x_252 <= (x_253 - 1))) {
- } else {
- break;
- }
- const int x_259 = obj.numbers[j_1];
- if ((x_259 <= pivot)) {
- i_1 = (i_1 + 1);
- param = i_1;
- param_1 = j_1;
- swap_i1_i1_(param, param_1, float3x3(float3(0.0f, 0.0f, 0.0f), float3(0.0f, 0.0f, 0.0f), float3(0.0f, 0.0f, 0.0f)));
- }
- {
- j_1 = (j_1 + 1);
- }
- }
- i_1 = (i_1 + 1);
- param_2 = i_1;
- const int x_274 = h;
- param_3 = x_274;
- swap_i1_i1_(param_2, param_3, float3x3(float3(0.0f, 0.0f, 0.0f), float3(0.0f, 0.0f, 0.0f), float3(0.0f, 0.0f, 0.0f)));
- return i_1;
-}
-
-void quicksort_() {
- int l_1 = 0;
- int h_1 = 0;
- int top = 0;
- int stack[10] = (int[10])0;
- int p = 0;
- int param_4 = 0;
- int param_5 = 0;
- l_1 = 0;
- h_1 = 9;
- top = -1;
- const int x_279 = (top + 1);
- top = x_279;
- stack[x_279] = l_1;
- const int x_283 = (top + 1);
- top = x_283;
- stack[x_283] = h_1;
- [loop] while (true) {
- if ((top >= 0)) {
- } else {
- break;
- }
- const int x_293 = top;
- top = (x_293 - 1);
- const int x_296 = stack[x_293];
- h_1 = x_296;
- const int x_297 = top;
- top = (x_297 - 1);
- const int x_300 = stack[x_297];
- l_1 = x_300;
- param_4 = l_1;
- param_5 = h_1;
- const int x_303 = performPartition_i1_i1_(param_4, param_5);
- p = x_303;
- if (((p - 1) > l_1)) {
- const int x_311 = (top + 1);
- top = x_311;
- stack[x_311] = l_1;
- const int x_315 = (top + 1);
- top = x_315;
- stack[x_315] = (p - 1);
- }
- if (((p + 1) < h_1)) {
- const int x_326 = (top + 1);
- top = x_326;
- stack[x_326] = (p + 1);
- const int x_331 = (top + 1);
- top = x_331;
- stack[x_331] = h_1;
- }
- }
- return;
-}
-
-void main_1() {
- int i_2 = 0;
- float2 uv = float2(0.0f, 0.0f);
- float3 color = float3(0.0f, 0.0f, 0.0f);
- i_2 = 0;
- {
- [loop] for(; (i_2 < 10); i_2 = (i_2 + 1)) {
- obj.numbers[i_2] = (10 - i_2);
- const int x_96 = i_2;
- const int x_99 = obj.numbers[i_2];
- const int x_102 = obj.numbers[i_2];
- obj.numbers[x_96] = (x_99 * x_102);
- }
- }
- quicksort_();
- const float4 x_108 = gl_FragCoord;
- const float2 x_111 = asfloat(x_32[0].xy);
- uv = (float2(x_108.x, x_108.y) / x_111);
- color = float3(1.0f, 2.0f, 3.0f);
- const int x_114 = obj.numbers[0];
- const float x_117 = color.x;
- color.x = (x_117 + float(x_114));
- const float x_121 = uv.x;
- if ((x_121 > 0.25f)) {
- const int x_126 = obj.numbers[1];
- const float x_129 = color.x;
- color.x = (x_129 + float(x_126));
- }
- const float x_133 = uv.x;
- if ((x_133 > 0.5f)) {
- const int x_138 = obj.numbers[2];
- const float x_141 = color.y;
- color.y = (x_141 + float(x_138));
- }
- const float x_145 = uv.x;
- if ((x_145 > 0.75f)) {
- const int x_150 = obj.numbers[3];
- const float x_153 = color.z;
- color.z = (x_153 + float(x_150));
- }
- const int x_157 = obj.numbers[4];
- const float x_160 = color.y;
- color.y = (x_160 + float(x_157));
- const float x_164 = uv.y;
- if ((x_164 > 0.25f)) {
- const int x_169 = obj.numbers[5];
- const float x_172 = color.x;
- color.x = (x_172 + float(x_169));
- }
- const float x_176 = uv.y;
- if ((x_176 > 0.5f)) {
- const int x_181 = obj.numbers[6];
- const float x_184 = color.y;
- color.y = (x_184 + float(x_181));
- }
- const float x_188 = uv.y;
- if ((x_188 > 0.75f)) {
- const int x_193 = obj.numbers[7];
- const float x_196 = color.z;
- color.z = (x_196 + float(x_193));
- }
- const int x_200 = obj.numbers[8];
- const float x_203 = color.z;
- color.z = (x_203 + float(x_200));
- const float x_207 = uv.x;
- const float x_209 = uv.y;
- if ((abs((x_207 - x_209)) < 0.25f)) {
- const int x_216 = obj.numbers[9];
- const float x_219 = color.x;
- color.x = (x_219 + float(x_216));
- }
- const float3 x_223 = normalize(color);
- x_GLF_color = float4(x_223.x, x_223.y, x_223.z, 1.0f);
- return;
-}
-
-struct main_out {
- float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
- float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
- float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
- gl_FragCoord = gl_FragCoord_param;
- main_1();
- const main_out tint_symbol_4 = {x_GLF_color};
- return tint_symbol_4;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
- const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
- tint_symbol_2 wrapper_result = (tint_symbol_2)0;
- wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
- return wrapper_result;
-}
-C:\src\tint\test\Shader@0x0000029339D00EC0(128,7-22): warning X3550: array reference cannot be used as an l-value; not natively addressable, forcing loop to unroll
-C:\src\tint\test\Shader@0x0000029339D00EC0(127,12-45): error X3531: can't unroll loops marked with loop attribute
-
diff --git a/test/vk-gl-cts/graphicsfuzz/spv-stable-quicksort-mat-func-param/1.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/spv-stable-quicksort-mat-func-param/1.wgsl.expected.hlsl
deleted file mode 100644
index f785669..0000000
--- a/test/vk-gl-cts/graphicsfuzz/spv-stable-quicksort-mat-func-param/1.wgsl.expected.hlsl
+++ /dev/null
@@ -1,224 +0,0 @@
-SKIP: FAILED
-
-struct QuicksortObject {
- int numbers[10];
-};
-
-static QuicksortObject obj = (QuicksortObject)0;
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_32 : register(b0, space0) {
- uint4 x_32[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void swap_i1_i1_(inout int i, inout int j, float3x3 x_228) {
- int temp = 0;
- const int x_230 = i;
- const int x_232 = obj.numbers[x_230];
- temp = x_232;
- const int x_233 = i;
- const int x_234 = j;
- const int x_236 = obj.numbers[x_234];
- obj.numbers[x_233] = x_236;
- const int x_238 = j;
- obj.numbers[x_238] = temp;
- return;
-}
-
-int performPartition_i1_i1_(inout int l, inout int h) {
- int pivot = 0;
- int i_1 = 0;
- int j_1 = 0;
- int param = 0;
- int param_1 = 0;
- int param_2 = 0;
- int param_3 = 0;
- const int x_242 = h;
- const int x_244 = obj.numbers[x_242];
- pivot = x_244;
- const int x_245 = l;
- i_1 = (x_245 - 1);
- const int x_247 = l;
- j_1 = x_247;
- [loop] while (true) {
- const int x_252 = j_1;
- const int x_253 = h;
- if ((x_252 <= (x_253 - 1))) {
- } else {
- break;
- }
- const int x_259 = obj.numbers[j_1];
- if ((x_259 <= pivot)) {
- i_1 = (i_1 + 1);
- param = i_1;
- param_1 = j_1;
- swap_i1_i1_(param, param_1, float3x3(float3(0.0f, 0.0f, 0.0f), float3(0.0f, 0.0f, 0.0f), float3(0.0f, 0.0f, 0.0f)));
- }
- {
- j_1 = (j_1 + 1);
- }
- }
- i_1 = (i_1 + 1);
- param_2 = i_1;
- const int x_274 = h;
- param_3 = x_274;
- swap_i1_i1_(param_2, param_3, float3x3(float3(0.0f, 0.0f, 0.0f), float3(0.0f, 0.0f, 0.0f), float3(0.0f, 0.0f, 0.0f)));
- return i_1;
-}
-
-void quicksort_() {
- int l_1 = 0;
- int h_1 = 0;
- int top = 0;
- int stack[10] = (int[10])0;
- int p = 0;
- int param_4 = 0;
- int param_5 = 0;
- l_1 = 0;
- h_1 = 9;
- top = -1;
- const int x_279 = (top + 1);
- top = x_279;
- stack[x_279] = l_1;
- const int x_283 = (top + 1);
- top = x_283;
- stack[x_283] = h_1;
- [loop] while (true) {
- if ((top >= 0)) {
- } else {
- break;
- }
- const int x_293 = top;
- top = (x_293 - 1);
- const int x_296 = stack[x_293];
- h_1 = x_296;
- const int x_297 = top;
- top = (x_297 - 1);
- const int x_300 = stack[x_297];
- l_1 = x_300;
- param_4 = l_1;
- param_5 = h_1;
- const int x_303 = performPartition_i1_i1_(param_4, param_5);
- p = x_303;
- if (((p - 1) > l_1)) {
- const int x_311 = (top + 1);
- top = x_311;
- stack[x_311] = l_1;
- const int x_315 = (top + 1);
- top = x_315;
- stack[x_315] = (p - 1);
- }
- if (((p + 1) < h_1)) {
- const int x_326 = (top + 1);
- top = x_326;
- stack[x_326] = (p + 1);
- const int x_331 = (top + 1);
- top = x_331;
- stack[x_331] = h_1;
- }
- }
- return;
-}
-
-void main_1() {
- int i_2 = 0;
- float2 uv = float2(0.0f, 0.0f);
- float3 color = float3(0.0f, 0.0f, 0.0f);
- i_2 = 0;
- {
- [loop] for(; (i_2 < 10); i_2 = (i_2 + 1)) {
- obj.numbers[i_2] = (10 - i_2);
- const int x_96 = i_2;
- const int x_99 = obj.numbers[i_2];
- const int x_102 = obj.numbers[i_2];
- obj.numbers[x_96] = (x_99 * x_102);
- }
- }
- quicksort_();
- const float4 x_108 = gl_FragCoord;
- const float2 x_111 = asfloat(x_32[0].xy);
- uv = (float2(x_108.x, x_108.y) / x_111);
- color = float3(1.0f, 2.0f, 3.0f);
- const int x_114 = obj.numbers[0];
- const float x_117 = color.x;
- color.x = (x_117 + float(x_114));
- const float x_121 = uv.x;
- if ((x_121 > 0.25f)) {
- const int x_126 = obj.numbers[1];
- const float x_129 = color.x;
- color.x = (x_129 + float(x_126));
- }
- const float x_133 = uv.x;
- if ((x_133 > 0.5f)) {
- const int x_138 = obj.numbers[2];
- const float x_141 = color.y;
- color.y = (x_141 + float(x_138));
- }
- const float x_145 = uv.x;
- if ((x_145 > 0.75f)) {
- const int x_150 = obj.numbers[3];
- const float x_153 = color.z;
- color.z = (x_153 + float(x_150));
- }
- const int x_157 = obj.numbers[4];
- const float x_160 = color.y;
- color.y = (x_160 + float(x_157));
- const float x_164 = uv.y;
- if ((x_164 > 0.25f)) {
- const int x_169 = obj.numbers[5];
- const float x_172 = color.x;
- color.x = (x_172 + float(x_169));
- }
- const float x_176 = uv.y;
- if ((x_176 > 0.5f)) {
- const int x_181 = obj.numbers[6];
- const float x_184 = color.y;
- color.y = (x_184 + float(x_181));
- }
- const float x_188 = uv.y;
- if ((x_188 > 0.75f)) {
- const int x_193 = obj.numbers[7];
- const float x_196 = color.z;
- color.z = (x_196 + float(x_193));
- }
- const int x_200 = obj.numbers[8];
- const float x_203 = color.z;
- color.z = (x_203 + float(x_200));
- const float x_207 = uv.x;
- const float x_209 = uv.y;
- if ((abs((x_207 - x_209)) < 0.25f)) {
- const int x_216 = obj.numbers[9];
- const float x_219 = color.x;
- color.x = (x_219 + float(x_216));
- }
- const float3 x_223 = normalize(color);
- x_GLF_color = float4(x_223.x, x_223.y, x_223.z, 1.0f);
- return;
-}
-
-struct main_out {
- float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
- float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
- float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
- gl_FragCoord = gl_FragCoord_param;
- main_1();
- const main_out tint_symbol_4 = {x_GLF_color};
- return tint_symbol_4;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
- const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
- tint_symbol_2 wrapper_result = (tint_symbol_2)0;
- wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
- return wrapper_result;
-}
-C:\src\tint\test\Shader@0x000001F0DC256BE0(128,7-22): warning X3550: array reference cannot be used as an l-value; not natively addressable, forcing loop to unroll
-C:\src\tint\test\Shader@0x000001F0DC256BE0(127,12-45): error X3531: can't unroll loops marked with loop attribute
-
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-binarysearch-tree-false-if-discard-loop/1.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/stable-binarysearch-tree-false-if-discard-loop/1.spvasm.expected.hlsl
index 4a7eed3..1626926 100755
--- a/test/vk-gl-cts/graphicsfuzz/stable-binarysearch-tree-false-if-discard-loop/1.spvasm.expected.hlsl
+++ b/test/vk-gl-cts/graphicsfuzz/stable-binarysearch-tree-false-if-discard-loop/1.spvasm.expected.hlsl
Binary files differ
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-binarysearch-tree-false-if-discard-loop/1.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/stable-binarysearch-tree-false-if-discard-loop/1.wgsl.expected.hlsl
index 0b0dee9..711e15f 100755
--- a/test/vk-gl-cts/graphicsfuzz/stable-binarysearch-tree-false-if-discard-loop/1.wgsl.expected.hlsl
+++ b/test/vk-gl-cts/graphicsfuzz/stable-binarysearch-tree-false-if-discard-loop/1.wgsl.expected.hlsl
Binary files differ
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-binarysearch-tree-with-loop-read-write-global/1.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/stable-binarysearch-tree-with-loop-read-write-global/1.spvasm.expected.hlsl
index f2edc08..b1c2176 100644
--- a/test/vk-gl-cts/graphicsfuzz/stable-binarysearch-tree-with-loop-read-write-global/1.spvasm.expected.hlsl
+++ b/test/vk-gl-cts/graphicsfuzz/stable-binarysearch-tree-with-loop-read-write-global/1.spvasm.expected.hlsl
@@ -92,7 +92,11 @@
int identity_i1_(inout int a) {
const int x_202 = a;
const int x_203 = a;
- obj.numbers[x_202] = x_203;
+ {
+ int tint_symbol_1[10] = obj.numbers;
+ tint_symbol_1[x_202] = x_203;
+ obj.numbers = tint_symbol_1;
+ }
const int x_206 = obj.numbers[2];
return x_206;
}
@@ -264,22 +268,22 @@
struct main_out {
float4 x_GLF_color_1;
};
-struct tint_symbol {
+struct tint_symbol_2 {
float4 x_GLF_color_1 : SV_Target0;
};
main_out main_inner() {
main_1();
- const main_out tint_symbol_2 = {x_GLF_color};
- return tint_symbol_2;
+ const main_out tint_symbol_4 = {x_GLF_color};
+ return tint_symbol_4;
}
-tint_symbol main() {
+tint_symbol_2 main() {
const main_out inner_result = main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
+ tint_symbol_2 wrapper_result = (tint_symbol_2)0;
wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
return wrapper_result;
}
-C:\src\tint\test\Shader@0x000002117DDC0DA0(32,10-21): warning X3557: loop only executes for 0 iteration(s), consider removing [loop]
-C:\src\tint\test\Shader@0x000002117DDC0DA0(203,12-42): error X3531: can't unroll loops marked with loop attribute
+C:\src\tint\test\Shader@0x0000019568397DE0(32,10-21): warning X3557: loop only executes for 0 iteration(s), consider removing [loop]
+internal error: compilation aborted unexpectedly
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-binarysearch-tree-with-loop-read-write-global/1.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/stable-binarysearch-tree-with-loop-read-write-global/1.wgsl.expected.hlsl
index cb24484..b75d352 100644
--- a/test/vk-gl-cts/graphicsfuzz/stable-binarysearch-tree-with-loop-read-write-global/1.wgsl.expected.hlsl
+++ b/test/vk-gl-cts/graphicsfuzz/stable-binarysearch-tree-with-loop-read-write-global/1.wgsl.expected.hlsl
@@ -1,14 +1,14 @@
SKIP: FAILED
-vk-gl-cts/graphicsfuzz/stable-binarysearch-tree-with-loop-read-write-global/1.wgsl:71:7 warning: code is unreachable
+vk-gl-cts/graphicsfuzz/stable-binarysearch-tree-with-loop-read-write-global/1.wgsl:70:7 warning: code is unreachable
return;
^^^^^^
-vk-gl-cts/graphicsfuzz/stable-binarysearch-tree-with-loop-read-write-global/1.wgsl:94:7 warning: code is unreachable
+vk-gl-cts/graphicsfuzz/stable-binarysearch-tree-with-loop-read-write-global/1.wgsl:93:7 warning: code is unreachable
return;
^^^^^^
-vk-gl-cts/graphicsfuzz/stable-binarysearch-tree-with-loop-read-write-global/1.wgsl:96:5 warning: code is unreachable
+vk-gl-cts/graphicsfuzz/stable-binarysearch-tree-with-loop-read-write-global/1.wgsl:95:5 warning: code is unreachable
return;
^^^^^^
@@ -101,7 +101,11 @@
int identity_i1_(inout int a) {
const int x_202 = a;
const int x_203 = a;
- obj.numbers[x_202] = x_203;
+ {
+ int tint_symbol_1[10] = obj.numbers;
+ tint_symbol_1[x_202] = x_203;
+ obj.numbers = tint_symbol_1;
+ }
const int x_206 = obj.numbers[2];
return x_206;
}
@@ -273,22 +277,22 @@
struct main_out {
float4 x_GLF_color_1;
};
-struct tint_symbol {
+struct tint_symbol_2 {
float4 x_GLF_color_1 : SV_Target0;
};
main_out main_inner() {
main_1();
- const main_out tint_symbol_2 = {x_GLF_color};
- return tint_symbol_2;
+ const main_out tint_symbol_4 = {x_GLF_color};
+ return tint_symbol_4;
}
-tint_symbol main() {
+tint_symbol_2 main() {
const main_out inner_result = main_inner();
- tint_symbol wrapper_result = (tint_symbol)0;
+ tint_symbol_2 wrapper_result = (tint_symbol_2)0;
wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
return wrapper_result;
}
-C:\src\tint\test\Shader@0x00000219E1FE81C0(32,10-21): warning X3557: loop only executes for 0 iteration(s), consider removing [loop]
-C:\src\tint\test\Shader@0x00000219E1FE81C0(203,12-42): error X3531: can't unroll loops marked with loop attribute
+C:\src\tint\test\Shader@0x0000016D6EA06C40(32,10-21): warning X3557: loop only executes for 0 iteration(s), consider removing [loop]
+internal error: compilation aborted unexpectedly
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-quicksort-conditional-bitwise-or-clamp/1.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/stable-quicksort-conditional-bitwise-or-clamp/1.spvasm.expected.hlsl
deleted file mode 100644
index 49e137d..0000000
--- a/test/vk-gl-cts/graphicsfuzz/stable-quicksort-conditional-bitwise-or-clamp/1.spvasm.expected.hlsl
+++ /dev/null
@@ -1,242 +0,0 @@
-SKIP: FAILED
-
-struct QuicksortObject {
- int numbers[10];
-};
-
-static QuicksortObject obj = (QuicksortObject)0;
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_34 : register(b0, space0) {
- uint4 x_34[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void swap_i1_i1_(inout int i, inout int j) {
- int temp = 0;
- const int x_230 = i;
- const int x_232 = obj.numbers[x_230];
- temp = x_232;
- const int x_233 = i;
- const int x_234 = j;
- const int x_236 = obj.numbers[x_234];
- obj.numbers[x_233] = x_236;
- const int x_238 = j;
- obj.numbers[x_238] = temp;
- return;
-}
-
-int performPartition_i1_i1_(inout int l, inout int h) {
- int pivot = 0;
- int i_1 = 0;
- int j_1 = 0;
- int param = 0;
- int param_1 = 0;
- int param_2 = 0;
- int param_3 = 0;
- const int x_242 = h;
- const int x_244 = obj.numbers[x_242];
- pivot = x_244;
- const int x_245 = l;
- i_1 = (x_245 - 1);
- const int x_247 = l;
- j_1 = x_247;
- [loop] while (true) {
- const int x_252 = j_1;
- const int x_253 = h;
- if ((x_252 <= (x_253 - 1))) {
- } else {
- break;
- }
- const int x_259 = obj.numbers[j_1];
- if ((x_259 <= pivot)) {
- i_1 = (i_1 + 1);
- param = i_1;
- param_1 = j_1;
- swap_i1_i1_(param, param_1);
- }
- {
- j_1 = (j_1 + 1);
- }
- }
- i_1 = (i_1 + 1);
- param_2 = i_1;
- const int x_274 = h;
- param_3 = x_274;
- swap_i1_i1_(param_2, param_3);
- return i_1;
-}
-
-void quicksort_() {
- int l_1 = 0;
- int h_1 = 0;
- int top = 0;
- int stack[10] = (int[10])0;
- int int_a = 0;
- int x_278 = 0;
- int x_279 = 0;
- int clamp_a = 0;
- int p = 0;
- int param_4 = 0;
- int param_5 = 0;
- l_1 = 0;
- h_1 = 9;
- top = -1;
- const int x_281 = (top + 1);
- top = x_281;
- stack[x_281] = l_1;
- const float x_285 = gl_FragCoord.y;
- if ((x_285 >= 0.0f)) {
- const int x_290 = h_1;
- if (false) {
- x_279 = 1;
- } else {
- x_279 = (h_1 << asuint(0));
- }
- x_278 = (x_290 | x_279);
- } else {
- x_278 = 1;
- }
- int_a = x_278;
- clamp_a = clamp(h_1, h_1, int_a);
- const int x_304 = (top + 1);
- top = x_304;
- stack[x_304] = (clamp_a / 1);
- [loop] while (true) {
- if ((top >= 0)) {
- } else {
- break;
- }
- const int x_315 = top;
- top = (x_315 - 1);
- const int x_318 = stack[x_315];
- h_1 = x_318;
- const int x_319 = top;
- top = (x_319 - 1);
- const int x_322 = stack[x_319];
- l_1 = x_322;
- param_4 = l_1;
- param_5 = h_1;
- const int x_325 = performPartition_i1_i1_(param_4, param_5);
- p = x_325;
- if (((p - 1) > l_1)) {
- const int x_333 = (top + 1);
- top = x_333;
- stack[x_333] = l_1;
- const int x_337 = (top + 1);
- top = x_337;
- stack[x_337] = (p - 1);
- }
- if (((p + 1) < h_1)) {
- const int x_348 = (top + 1);
- top = x_348;
- stack[x_348] = (p + 1);
- const int x_353 = (top + 1);
- top = x_353;
- stack[x_353] = h_1;
- }
- }
- return;
-}
-
-void main_1() {
- int i_2 = 0;
- float2 uv = float2(0.0f, 0.0f);
- float3 color = float3(0.0f, 0.0f, 0.0f);
- i_2 = 0;
- {
- [loop] for(; (i_2 < 10); i_2 = (i_2 + 1)) {
- obj.numbers[i_2] = (10 - i_2);
- const int x_97 = i_2;
- const int x_100 = obj.numbers[i_2];
- const int x_103 = obj.numbers[i_2];
- obj.numbers[x_97] = (x_100 * x_103);
- }
- }
- quicksort_();
- const float4 x_109 = gl_FragCoord;
- const float2 x_112 = asfloat(x_34[0].xy);
- uv = (float2(x_109.x, x_109.y) / x_112);
- color = float3(1.0f, 2.0f, 3.0f);
- const int x_115 = obj.numbers[0];
- const float x_118 = color.x;
- color.x = (x_118 + float(x_115));
- const float x_122 = uv.x;
- if ((x_122 > 0.25f)) {
- const int x_127 = obj.numbers[1];
- const float x_130 = color.x;
- color.x = (x_130 + float(x_127));
- }
- const float x_134 = uv.x;
- if ((x_134 > 0.5f)) {
- const int x_139 = obj.numbers[2];
- const float x_142 = color.y;
- color.y = (x_142 + float(x_139));
- }
- const float x_146 = uv.x;
- if ((x_146 > 0.75f)) {
- const int x_151 = obj.numbers[3];
- const float x_154 = color.z;
- color.z = (x_154 + float(x_151));
- }
- const int x_158 = obj.numbers[4];
- const float x_161 = color.y;
- color.y = (x_161 + float(x_158));
- const float x_165 = uv.y;
- if ((x_165 > 0.25f)) {
- const int x_170 = obj.numbers[5];
- const float x_173 = color.x;
- color.x = (x_173 + float(x_170));
- }
- const float x_177 = uv.y;
- if ((x_177 > 0.5f)) {
- const int x_182 = obj.numbers[6];
- const float x_185 = color.y;
- color.y = (x_185 + float(x_182));
- }
- const float x_189 = uv.y;
- if ((x_189 > 0.75f)) {
- const int x_194 = obj.numbers[7];
- const float x_197 = color.z;
- color.z = (x_197 + float(x_194));
- }
- const int x_201 = obj.numbers[8];
- const float x_204 = color.z;
- color.z = (x_204 + float(x_201));
- const float x_208 = uv.x;
- const float x_210 = uv.y;
- if ((abs((x_208 - x_210)) < 0.25f)) {
- const int x_217 = obj.numbers[9];
- const float x_220 = color.x;
- color.x = (x_220 + float(x_217));
- }
- const float3 x_224 = normalize(color);
- x_GLF_color = float4(x_224.x, x_224.y, x_224.z, 1.0f);
- return;
-}
-
-struct main_out {
- float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
- float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
- float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
- gl_FragCoord = gl_FragCoord_param;
- main_1();
- const main_out tint_symbol_4 = {x_GLF_color};
- return tint_symbol_4;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
- const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
- tint_symbol_2 wrapper_result = (tint_symbol_2)0;
- wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
- return wrapper_result;
-}
-C:\src\tint\test\Shader@0x00000240D57880E0(146,7-22): warning X3550: array reference cannot be used as an l-value; not natively addressable, forcing loop to unroll
-C:\src\tint\test\Shader@0x00000240D57880E0(145,12-45): error X3531: can't unroll loops marked with loop attribute
-
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-quicksort-conditional-bitwise-or-clamp/1.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/stable-quicksort-conditional-bitwise-or-clamp/1.wgsl.expected.hlsl
deleted file mode 100644
index 013dea4..0000000
--- a/test/vk-gl-cts/graphicsfuzz/stable-quicksort-conditional-bitwise-or-clamp/1.wgsl.expected.hlsl
+++ /dev/null
@@ -1,242 +0,0 @@
-SKIP: FAILED
-
-struct QuicksortObject {
- int numbers[10];
-};
-
-static QuicksortObject obj = (QuicksortObject)0;
-static float4 gl_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_34 : register(b0, space0) {
- uint4 x_34[1];
-};
-static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void swap_i1_i1_(inout int i, inout int j) {
- int temp = 0;
- const int x_230 = i;
- const int x_232 = obj.numbers[x_230];
- temp = x_232;
- const int x_233 = i;
- const int x_234 = j;
- const int x_236 = obj.numbers[x_234];
- obj.numbers[x_233] = x_236;
- const int x_238 = j;
- obj.numbers[x_238] = temp;
- return;
-}
-
-int performPartition_i1_i1_(inout int l, inout int h) {
- int pivot = 0;
- int i_1 = 0;
- int j_1 = 0;
- int param = 0;
- int param_1 = 0;
- int param_2 = 0;
- int param_3 = 0;
- const int x_242 = h;
- const int x_244 = obj.numbers[x_242];
- pivot = x_244;
- const int x_245 = l;
- i_1 = (x_245 - 1);
- const int x_247 = l;
- j_1 = x_247;
- [loop] while (true) {
- const int x_252 = j_1;
- const int x_253 = h;
- if ((x_252 <= (x_253 - 1))) {
- } else {
- break;
- }
- const int x_259 = obj.numbers[j_1];
- if ((x_259 <= pivot)) {
- i_1 = (i_1 + 1);
- param = i_1;
- param_1 = j_1;
- swap_i1_i1_(param, param_1);
- }
- {
- j_1 = (j_1 + 1);
- }
- }
- i_1 = (i_1 + 1);
- param_2 = i_1;
- const int x_274 = h;
- param_3 = x_274;
- swap_i1_i1_(param_2, param_3);
- return i_1;
-}
-
-void quicksort_() {
- int l_1 = 0;
- int h_1 = 0;
- int top = 0;
- int stack[10] = (int[10])0;
- int int_a = 0;
- int x_278 = 0;
- int x_279 = 0;
- int clamp_a = 0;
- int p = 0;
- int param_4 = 0;
- int param_5 = 0;
- l_1 = 0;
- h_1 = 9;
- top = -1;
- const int x_281 = (top + 1);
- top = x_281;
- stack[x_281] = l_1;
- const float x_285 = gl_FragCoord.y;
- if ((x_285 >= 0.0f)) {
- const int x_290 = h_1;
- if (false) {
- x_279 = 1;
- } else {
- x_279 = (h_1 << asuint(0));
- }
- x_278 = (x_290 | x_279);
- } else {
- x_278 = 1;
- }
- int_a = x_278;
- clamp_a = clamp(h_1, h_1, int_a);
- const int x_304 = (top + 1);
- top = x_304;
- stack[x_304] = (clamp_a / 1);
- [loop] while (true) {
- if ((top >= 0)) {
- } else {
- break;
- }
- const int x_315 = top;
- top = (x_315 - 1);
- const int x_318 = stack[x_315];
- h_1 = x_318;
- const int x_319 = top;
- top = (x_319 - 1);
- const int x_322 = stack[x_319];
- l_1 = x_322;
- param_4 = l_1;
- param_5 = h_1;
- const int x_325 = performPartition_i1_i1_(param_4, param_5);
- p = x_325;
- if (((p - 1) > l_1)) {
- const int x_333 = (top + 1);
- top = x_333;
- stack[x_333] = l_1;
- const int x_337 = (top + 1);
- top = x_337;
- stack[x_337] = (p - 1);
- }
- if (((p + 1) < h_1)) {
- const int x_348 = (top + 1);
- top = x_348;
- stack[x_348] = (p + 1);
- const int x_353 = (top + 1);
- top = x_353;
- stack[x_353] = h_1;
- }
- }
- return;
-}
-
-void main_1() {
- int i_2 = 0;
- float2 uv = float2(0.0f, 0.0f);
- float3 color = float3(0.0f, 0.0f, 0.0f);
- i_2 = 0;
- {
- [loop] for(; (i_2 < 10); i_2 = (i_2 + 1)) {
- obj.numbers[i_2] = (10 - i_2);
- const int x_97 = i_2;
- const int x_100 = obj.numbers[i_2];
- const int x_103 = obj.numbers[i_2];
- obj.numbers[x_97] = (x_100 * x_103);
- }
- }
- quicksort_();
- const float4 x_109 = gl_FragCoord;
- const float2 x_112 = asfloat(x_34[0].xy);
- uv = (float2(x_109.x, x_109.y) / x_112);
- color = float3(1.0f, 2.0f, 3.0f);
- const int x_115 = obj.numbers[0];
- const float x_118 = color.x;
- color.x = (x_118 + float(x_115));
- const float x_122 = uv.x;
- if ((x_122 > 0.25f)) {
- const int x_127 = obj.numbers[1];
- const float x_130 = color.x;
- color.x = (x_130 + float(x_127));
- }
- const float x_134 = uv.x;
- if ((x_134 > 0.5f)) {
- const int x_139 = obj.numbers[2];
- const float x_142 = color.y;
- color.y = (x_142 + float(x_139));
- }
- const float x_146 = uv.x;
- if ((x_146 > 0.75f)) {
- const int x_151 = obj.numbers[3];
- const float x_154 = color.z;
- color.z = (x_154 + float(x_151));
- }
- const int x_158 = obj.numbers[4];
- const float x_161 = color.y;
- color.y = (x_161 + float(x_158));
- const float x_165 = uv.y;
- if ((x_165 > 0.25f)) {
- const int x_170 = obj.numbers[5];
- const float x_173 = color.x;
- color.x = (x_173 + float(x_170));
- }
- const float x_177 = uv.y;
- if ((x_177 > 0.5f)) {
- const int x_182 = obj.numbers[6];
- const float x_185 = color.y;
- color.y = (x_185 + float(x_182));
- }
- const float x_189 = uv.y;
- if ((x_189 > 0.75f)) {
- const int x_194 = obj.numbers[7];
- const float x_197 = color.z;
- color.z = (x_197 + float(x_194));
- }
- const int x_201 = obj.numbers[8];
- const float x_204 = color.z;
- color.z = (x_204 + float(x_201));
- const float x_208 = uv.x;
- const float x_210 = uv.y;
- if ((abs((x_208 - x_210)) < 0.25f)) {
- const int x_217 = obj.numbers[9];
- const float x_220 = color.x;
- color.x = (x_220 + float(x_217));
- }
- const float3 x_224 = normalize(color);
- x_GLF_color = float4(x_224.x, x_224.y, x_224.z, 1.0f);
- return;
-}
-
-struct main_out {
- float4 x_GLF_color_1;
-};
-struct tint_symbol_1 {
- float4 gl_FragCoord_param : SV_Position;
-};
-struct tint_symbol_2 {
- float4 x_GLF_color_1 : SV_Target0;
-};
-
-main_out main_inner(float4 gl_FragCoord_param) {
- gl_FragCoord = gl_FragCoord_param;
- main_1();
- const main_out tint_symbol_4 = {x_GLF_color};
- return tint_symbol_4;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
- const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
- tint_symbol_2 wrapper_result = (tint_symbol_2)0;
- wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
- return wrapper_result;
-}
-C:\src\tint\test\Shader@0x000001EE8601E080(146,7-22): warning X3550: array reference cannot be used as an l-value; not natively addressable, forcing loop to unroll
-C:\src\tint\test\Shader@0x000001EE8601E080(145,12-45): error X3531: can't unroll loops marked with loop attribute
-
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-quicksort-for-loop-with-injection/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/stable-quicksort-for-loop-with-injection/0-opt.spvasm.expected.hlsl
deleted file mode 100644
index 68cfc73..0000000
--- a/test/vk-gl-cts/graphicsfuzz/stable-quicksort-for-loop-with-injection/0-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,230 +0,0 @@
-SKIP: FAILED
-
-struct QuicksortObject {
- int numbers[10];
-};
-
-static QuicksortObject obj = (QuicksortObject)0;
-static float4 x_GLF_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-static float4 x_GLF_pos = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_34 : register(b0, space0) {
- uint4 x_34[1];
-};
-static float4 frag_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-static float4 gl_Position = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void swap_i1_i1_(inout int i, inout int j) {
- int temp = 0;
- const int x_239 = i;
- const int x_241 = obj.numbers[x_239];
- temp = x_241;
- const int x_242 = i;
- const int x_243 = j;
- const int x_245 = obj.numbers[x_243];
- obj.numbers[x_242] = x_245;
- const int x_247 = j;
- obj.numbers[x_247] = temp;
- return;
-}
-
-int performPartition_i1_i1_(inout int l, inout int h) {
- int pivot = 0;
- int i_1 = 0;
- int j_1 = 0;
- int param = 0;
- int param_1 = 0;
- int param_2 = 0;
- int param_3 = 0;
- const int x_251 = h;
- const int x_253 = obj.numbers[x_251];
- pivot = x_253;
- const int x_254 = l;
- i_1 = (x_254 - 1);
- const int x_256 = l;
- j_1 = x_256;
- [loop] while (true) {
- const int x_261 = j_1;
- const int x_262 = h;
- if ((x_261 <= (x_262 - 1))) {
- } else {
- break;
- }
- const int x_268 = obj.numbers[j_1];
- if ((x_268 <= pivot)) {
- i_1 = (i_1 + 1);
- param = i_1;
- param_1 = j_1;
- swap_i1_i1_(param, param_1);
- }
- {
- j_1 = (j_1 + 1);
- }
- }
- param_2 = (i_1 + 1);
- const int x_282 = h;
- param_3 = x_282;
- swap_i1_i1_(param_2, param_3);
- return (i_1 + 1);
-}
-
-void quicksort_() {
- int l_1 = 0;
- int h_1 = 0;
- int top = 0;
- int stack[10] = (int[10])0;
- int p = 0;
- int param_4 = 0;
- int param_5 = 0;
- l_1 = 0;
- h_1 = 9;
- top = -1;
- const int x_288 = (top + 1);
- top = x_288;
- stack[x_288] = l_1;
- const int x_292 = (top + 1);
- top = x_292;
- stack[x_292] = h_1;
- [loop] while (true) {
- if ((top >= 0)) {
- } else {
- break;
- }
- const int x_302 = top;
- top = (x_302 - 1);
- const int x_305 = stack[x_302];
- h_1 = x_305;
- const int x_306 = top;
- top = (x_306 - 1);
- const int x_309 = stack[x_306];
- l_1 = x_309;
- param_4 = l_1;
- param_5 = h_1;
- const int x_312 = performPartition_i1_i1_(param_4, param_5);
- p = x_312;
- if (((p - 1) > l_1)) {
- const int x_320 = (top + 1);
- top = x_320;
- stack[x_320] = l_1;
- const int x_324 = (top + 1);
- top = x_324;
- stack[x_324] = (p - 1);
- }
- if (((p + 1) < h_1)) {
- const int x_335 = (top + 1);
- top = x_335;
- stack[x_335] = (p + 1);
- const int x_340 = (top + 1);
- top = x_340;
- stack[x_340] = h_1;
- }
- }
- return;
-}
-
-void main_1() {
- int i_2 = 0;
- float2 uv = float2(0.0f, 0.0f);
- float3 color = float3(0.0f, 0.0f, 0.0f);
- x_GLF_FragCoord = ((x_GLF_pos + float4(1.0f, 1.0f, 0.0f, 0.0f)) * float4(128.0f, 128.0f, 1.0f, 1.0f));
- i_2 = 0;
- {
- [loop] for(; (i_2 < 10); i_2 = (i_2 + 1)) {
- obj.numbers[i_2] = (10 - i_2);
- const int x_104 = i_2;
- const int x_107 = obj.numbers[i_2];
- const int x_110 = obj.numbers[i_2];
- obj.numbers[x_104] = (x_107 * x_110);
- }
- }
- quicksort_();
- const float4 x_116 = x_GLF_FragCoord;
- const float2 x_119 = asfloat(x_34[0].xy);
- uv = (float2(x_116.x, x_116.y) / x_119);
- color = float3(1.0f, 2.0f, 3.0f);
- const int x_122 = obj.numbers[0];
- const float x_125 = color.x;
- color.x = (x_125 + float(x_122));
- const float x_129 = uv.x;
- if ((x_129 > 0.25f)) {
- const int x_134 = obj.numbers[1];
- const float x_137 = color.x;
- color.x = (x_137 + float(x_134));
- }
- const float x_141 = uv.x;
- if ((x_141 > 0.5f)) {
- const int x_146 = obj.numbers[2];
- const float x_149 = color.y;
- color.y = (x_149 + float(x_146));
- }
- const float x_153 = uv.x;
- if ((x_153 > 0.75f)) {
- const int x_158 = obj.numbers[3];
- const float x_161 = color.z;
- color.z = (x_161 + float(x_158));
- }
- const int x_165 = obj.numbers[4];
- const float x_168 = color.y;
- color.y = (x_168 + float(x_165));
- const float x_172 = uv.y;
- if ((x_172 > 0.25f)) {
- const int x_177 = obj.numbers[5];
- const float x_180 = color.x;
- color.x = (x_180 + float(x_177));
- }
- const float x_184 = uv.y;
- if ((x_184 > 0.5f)) {
- const int x_189 = obj.numbers[6];
- const float x_192 = color.y;
- color.y = (x_192 + float(x_189));
- }
- const float x_196 = uv.y;
- if ((x_196 > 0.75f)) {
- const int x_201 = obj.numbers[7];
- const float x_204 = color.z;
- color.z = (x_204 + float(x_201));
- }
- const int x_208 = obj.numbers[8];
- const float x_211 = color.z;
- color.z = (x_211 + float(x_208));
- const float x_215 = uv.x;
- const float x_217 = uv.y;
- if ((abs((x_215 - x_217)) < 0.25f)) {
- const int x_224 = obj.numbers[9];
- const float x_227 = color.x;
- color.x = (x_227 + float(x_224));
- }
- const float3 x_231 = normalize(color);
- frag_color = float4(x_231.x, x_231.y, x_231.z, 1.0f);
- gl_Position = x_GLF_pos;
- return;
-}
-
-struct main_out {
- float4 frag_color_1;
- float4 gl_Position;
-};
-struct tint_symbol_1 {
- float4 x_GLF_pos_param : TEXCOORD0;
-};
-struct tint_symbol_2 {
- float4 frag_color_1 : TEXCOORD0;
- float4 gl_Position : SV_Position;
-};
-
-main_out main_inner(float4 x_GLF_pos_param) {
- x_GLF_pos = x_GLF_pos_param;
- main_1();
- const main_out tint_symbol_4 = {frag_color, gl_Position};
- return tint_symbol_4;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
- const main_out inner_result = main_inner(tint_symbol.x_GLF_pos_param);
- tint_symbol_2 wrapper_result = (tint_symbol_2)0;
- wrapper_result.frag_color_1 = inner_result.frag_color_1;
- wrapper_result.gl_Position = inner_result.gl_Position;
- return wrapper_result;
-}
-C:\src\tint\test\Shader@0x000001E481EDD080(130,7-22): warning X3550: array reference cannot be used as an l-value; not natively addressable, forcing loop to unroll
-C:\src\tint\test\Shader@0x000001E481EDD080(129,12-45): error X3531: can't unroll loops marked with loop attribute
-
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-quicksort-for-loop-with-injection/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/stable-quicksort-for-loop-with-injection/0-opt.wgsl.expected.hlsl
deleted file mode 100644
index 21d9cc2..0000000
--- a/test/vk-gl-cts/graphicsfuzz/stable-quicksort-for-loop-with-injection/0-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,230 +0,0 @@
-SKIP: FAILED
-
-struct QuicksortObject {
- int numbers[10];
-};
-
-static QuicksortObject obj = (QuicksortObject)0;
-static float4 x_GLF_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-static float4 x_GLF_pos = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_34 : register(b0, space0) {
- uint4 x_34[1];
-};
-static float4 frag_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-static float4 gl_Position = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void swap_i1_i1_(inout int i, inout int j) {
- int temp = 0;
- const int x_239 = i;
- const int x_241 = obj.numbers[x_239];
- temp = x_241;
- const int x_242 = i;
- const int x_243 = j;
- const int x_245 = obj.numbers[x_243];
- obj.numbers[x_242] = x_245;
- const int x_247 = j;
- obj.numbers[x_247] = temp;
- return;
-}
-
-int performPartition_i1_i1_(inout int l, inout int h) {
- int pivot = 0;
- int i_1 = 0;
- int j_1 = 0;
- int param = 0;
- int param_1 = 0;
- int param_2 = 0;
- int param_3 = 0;
- const int x_251 = h;
- const int x_253 = obj.numbers[x_251];
- pivot = x_253;
- const int x_254 = l;
- i_1 = (x_254 - 1);
- const int x_256 = l;
- j_1 = x_256;
- [loop] while (true) {
- const int x_261 = j_1;
- const int x_262 = h;
- if ((x_261 <= (x_262 - 1))) {
- } else {
- break;
- }
- const int x_268 = obj.numbers[j_1];
- if ((x_268 <= pivot)) {
- i_1 = (i_1 + 1);
- param = i_1;
- param_1 = j_1;
- swap_i1_i1_(param, param_1);
- }
- {
- j_1 = (j_1 + 1);
- }
- }
- param_2 = (i_1 + 1);
- const int x_282 = h;
- param_3 = x_282;
- swap_i1_i1_(param_2, param_3);
- return (i_1 + 1);
-}
-
-void quicksort_() {
- int l_1 = 0;
- int h_1 = 0;
- int top = 0;
- int stack[10] = (int[10])0;
- int p = 0;
- int param_4 = 0;
- int param_5 = 0;
- l_1 = 0;
- h_1 = 9;
- top = -1;
- const int x_288 = (top + 1);
- top = x_288;
- stack[x_288] = l_1;
- const int x_292 = (top + 1);
- top = x_292;
- stack[x_292] = h_1;
- [loop] while (true) {
- if ((top >= 0)) {
- } else {
- break;
- }
- const int x_302 = top;
- top = (x_302 - 1);
- const int x_305 = stack[x_302];
- h_1 = x_305;
- const int x_306 = top;
- top = (x_306 - 1);
- const int x_309 = stack[x_306];
- l_1 = x_309;
- param_4 = l_1;
- param_5 = h_1;
- const int x_312 = performPartition_i1_i1_(param_4, param_5);
- p = x_312;
- if (((p - 1) > l_1)) {
- const int x_320 = (top + 1);
- top = x_320;
- stack[x_320] = l_1;
- const int x_324 = (top + 1);
- top = x_324;
- stack[x_324] = (p - 1);
- }
- if (((p + 1) < h_1)) {
- const int x_335 = (top + 1);
- top = x_335;
- stack[x_335] = (p + 1);
- const int x_340 = (top + 1);
- top = x_340;
- stack[x_340] = h_1;
- }
- }
- return;
-}
-
-void main_1() {
- int i_2 = 0;
- float2 uv = float2(0.0f, 0.0f);
- float3 color = float3(0.0f, 0.0f, 0.0f);
- x_GLF_FragCoord = ((x_GLF_pos + float4(1.0f, 1.0f, 0.0f, 0.0f)) * float4(128.0f, 128.0f, 1.0f, 1.0f));
- i_2 = 0;
- {
- [loop] for(; (i_2 < 10); i_2 = (i_2 + 1)) {
- obj.numbers[i_2] = (10 - i_2);
- const int x_104 = i_2;
- const int x_107 = obj.numbers[i_2];
- const int x_110 = obj.numbers[i_2];
- obj.numbers[x_104] = (x_107 * x_110);
- }
- }
- quicksort_();
- const float4 x_116 = x_GLF_FragCoord;
- const float2 x_119 = asfloat(x_34[0].xy);
- uv = (float2(x_116.x, x_116.y) / x_119);
- color = float3(1.0f, 2.0f, 3.0f);
- const int x_122 = obj.numbers[0];
- const float x_125 = color.x;
- color.x = (x_125 + float(x_122));
- const float x_129 = uv.x;
- if ((x_129 > 0.25f)) {
- const int x_134 = obj.numbers[1];
- const float x_137 = color.x;
- color.x = (x_137 + float(x_134));
- }
- const float x_141 = uv.x;
- if ((x_141 > 0.5f)) {
- const int x_146 = obj.numbers[2];
- const float x_149 = color.y;
- color.y = (x_149 + float(x_146));
- }
- const float x_153 = uv.x;
- if ((x_153 > 0.75f)) {
- const int x_158 = obj.numbers[3];
- const float x_161 = color.z;
- color.z = (x_161 + float(x_158));
- }
- const int x_165 = obj.numbers[4];
- const float x_168 = color.y;
- color.y = (x_168 + float(x_165));
- const float x_172 = uv.y;
- if ((x_172 > 0.25f)) {
- const int x_177 = obj.numbers[5];
- const float x_180 = color.x;
- color.x = (x_180 + float(x_177));
- }
- const float x_184 = uv.y;
- if ((x_184 > 0.5f)) {
- const int x_189 = obj.numbers[6];
- const float x_192 = color.y;
- color.y = (x_192 + float(x_189));
- }
- const float x_196 = uv.y;
- if ((x_196 > 0.75f)) {
- const int x_201 = obj.numbers[7];
- const float x_204 = color.z;
- color.z = (x_204 + float(x_201));
- }
- const int x_208 = obj.numbers[8];
- const float x_211 = color.z;
- color.z = (x_211 + float(x_208));
- const float x_215 = uv.x;
- const float x_217 = uv.y;
- if ((abs((x_215 - x_217)) < 0.25f)) {
- const int x_224 = obj.numbers[9];
- const float x_227 = color.x;
- color.x = (x_227 + float(x_224));
- }
- const float3 x_231 = normalize(color);
- frag_color = float4(x_231.x, x_231.y, x_231.z, 1.0f);
- gl_Position = x_GLF_pos;
- return;
-}
-
-struct main_out {
- float4 frag_color_1;
- float4 gl_Position;
-};
-struct tint_symbol_1 {
- float4 x_GLF_pos_param : TEXCOORD0;
-};
-struct tint_symbol_2 {
- float4 frag_color_1 : TEXCOORD0;
- float4 gl_Position : SV_Position;
-};
-
-main_out main_inner(float4 x_GLF_pos_param) {
- x_GLF_pos = x_GLF_pos_param;
- main_1();
- const main_out tint_symbol_4 = {frag_color, gl_Position};
- return tint_symbol_4;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
- const main_out inner_result = main_inner(tint_symbol.x_GLF_pos_param);
- tint_symbol_2 wrapper_result = (tint_symbol_2)0;
- wrapper_result.frag_color_1 = inner_result.frag_color_1;
- wrapper_result.gl_Position = inner_result.gl_Position;
- return wrapper_result;
-}
-C:\src\tint\test\Shader@0x000001D05546D140(130,7-22): warning X3550: array reference cannot be used as an l-value; not natively addressable, forcing loop to unroll
-C:\src\tint\test\Shader@0x000001D05546D140(129,12-45): error X3531: can't unroll loops marked with loop attribute
-
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-quicksort-for-loop-with-injection/2-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/stable-quicksort-for-loop-with-injection/2-opt.spvasm.expected.hlsl
deleted file mode 100644
index dd02853..0000000
--- a/test/vk-gl-cts/graphicsfuzz/stable-quicksort-for-loop-with-injection/2-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,238 +0,0 @@
-SKIP: FAILED
-
-struct QuicksortObject {
- int numbers[10];
-};
-
-static QuicksortObject obj = (QuicksortObject)0;
-static float4 x_GLF_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-static float4 x_GLF_pos = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_33 : register(b0, space0) {
- uint4 x_33[1];
-};
-cbuffer cbuffer_x_36 : register(b1, space0) {
- uint4 x_36[1];
-};
-static float4 frag_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-static float4 gl_Position = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void swap_i1_i1_(inout int i, inout int j) {
- int temp = 0;
- const int x_250 = i;
- const int x_252 = obj.numbers[x_250];
- temp = x_252;
- const int x_253 = i;
- const int x_254 = j;
- const int x_256 = obj.numbers[x_254];
- obj.numbers[x_253] = x_256;
- const int x_258 = j;
- obj.numbers[x_258] = temp;
- return;
-}
-
-int performPartition_i1_i1_(inout int l, inout int h) {
- int pivot = 0;
- int i_1 = 0;
- int j_1 = 0;
- int param = 0;
- int param_1 = 0;
- int param_2 = 0;
- int param_3 = 0;
- const int x_262 = h;
- const int x_264 = obj.numbers[x_262];
- pivot = x_264;
- const int x_265 = l;
- i_1 = (x_265 - 1);
- const int x_267 = l;
- j_1 = x_267;
- [loop] while (true) {
- const int x_272 = j_1;
- const int x_273 = h;
- if ((x_272 <= (x_273 - 1))) {
- } else {
- break;
- }
- const int x_279 = obj.numbers[j_1];
- if ((x_279 <= pivot)) {
- i_1 = (i_1 + 1);
- param = i_1;
- param_1 = j_1;
- swap_i1_i1_(param, param_1);
- }
- {
- j_1 = (j_1 + 1);
- }
- }
- param_2 = (i_1 + 1);
- const int x_293 = h;
- param_3 = x_293;
- swap_i1_i1_(param_2, param_3);
- return (i_1 + 1);
-}
-
-void quicksort_() {
- int l_1 = 0;
- int h_1 = 0;
- int top = 0;
- int stack[10] = (int[10])0;
- int p = 0;
- int param_4 = 0;
- int param_5 = 0;
- l_1 = 0;
- h_1 = 9;
- top = -1;
- const int x_299 = (top + 1);
- top = x_299;
- stack[x_299] = l_1;
- const int x_303 = (top + 1);
- top = x_303;
- stack[x_303] = h_1;
- [loop] while (true) {
- if ((top >= 0)) {
- } else {
- break;
- }
- const int x_313 = top;
- top = (x_313 - 1);
- const int x_316 = stack[x_313];
- h_1 = x_316;
- const int x_317 = top;
- top = (x_317 - 1);
- const int x_320 = stack[x_317];
- l_1 = x_320;
- param_4 = l_1;
- param_5 = h_1;
- const int x_323 = performPartition_i1_i1_(param_4, param_5);
- p = x_323;
- if (((p - 1) > l_1)) {
- const int x_331 = (top + 1);
- top = x_331;
- stack[x_331] = l_1;
- const int x_335 = (top + 1);
- top = x_335;
- stack[x_335] = (p - 1);
- }
- if (((p + 1) < h_1)) {
- const int x_346 = (top + 1);
- top = x_346;
- stack[x_346] = (p + 1);
- const int x_351 = (top + 1);
- top = x_351;
- stack[x_351] = h_1;
- }
- }
- return;
-}
-
-void main_1() {
- int i_2 = 0;
- float2 uv = float2(0.0f, 0.0f);
- float3 color = float3(0.0f, 0.0f, 0.0f);
- x_GLF_FragCoord = ((x_GLF_pos + float4(1.0f, 1.0f, 0.0f, 0.0f)) * float4(128.0f, 128.0f, 1.0f, 1.0f));
- i_2 = 0;
- {
- [loop] for(; (i_2 < 10); i_2 = (i_2 + 1)) {
- obj.numbers[i_2] = (10 - i_2);
- const float x_109 = asfloat(x_33[0].x);
- const float x_111 = asfloat(x_33[0].y);
- if ((x_109 > x_111)) {
- break;
- }
- const int x_115 = i_2;
- const int x_118 = obj.numbers[i_2];
- const int x_121 = obj.numbers[i_2];
- obj.numbers[x_115] = (x_118 * x_121);
- }
- }
- quicksort_();
- const float4 x_127 = x_GLF_FragCoord;
- const float2 x_130 = asfloat(x_36[0].xy);
- uv = (float2(x_127.x, x_127.y) / x_130);
- color = float3(1.0f, 2.0f, 3.0f);
- const int x_133 = obj.numbers[0];
- const float x_136 = color.x;
- color.x = (x_136 + float(x_133));
- const float x_140 = uv.x;
- if ((x_140 > 0.25f)) {
- const int x_145 = obj.numbers[1];
- const float x_148 = color.x;
- color.x = (x_148 + float(x_145));
- }
- const float x_152 = uv.x;
- if ((x_152 > 0.5f)) {
- const int x_157 = obj.numbers[2];
- const float x_160 = color.y;
- color.y = (x_160 + float(x_157));
- }
- const float x_164 = uv.x;
- if ((x_164 > 0.75f)) {
- const int x_169 = obj.numbers[3];
- const float x_172 = color.z;
- color.z = (x_172 + float(x_169));
- }
- const int x_176 = obj.numbers[4];
- const float x_179 = color.y;
- color.y = (x_179 + float(x_176));
- const float x_183 = uv.y;
- if ((x_183 > 0.25f)) {
- const int x_188 = obj.numbers[5];
- const float x_191 = color.x;
- color.x = (x_191 + float(x_188));
- }
- const float x_195 = uv.y;
- if ((x_195 > 0.5f)) {
- const int x_200 = obj.numbers[6];
- const float x_203 = color.y;
- color.y = (x_203 + float(x_200));
- }
- const float x_207 = uv.y;
- if ((x_207 > 0.75f)) {
- const int x_212 = obj.numbers[7];
- const float x_215 = color.z;
- color.z = (x_215 + float(x_212));
- }
- const int x_219 = obj.numbers[8];
- const float x_222 = color.z;
- color.z = (x_222 + float(x_219));
- const float x_226 = uv.x;
- const float x_228 = uv.y;
- if ((abs((x_226 - x_228)) < 0.25f)) {
- const int x_235 = obj.numbers[9];
- const float x_238 = color.x;
- color.x = (x_238 + float(x_235));
- }
- const float3 x_242 = normalize(color);
- frag_color = float4(x_242.x, x_242.y, x_242.z, 1.0f);
- gl_Position = x_GLF_pos;
- return;
-}
-
-struct main_out {
- float4 frag_color_1;
- float4 gl_Position;
-};
-struct tint_symbol_1 {
- float4 x_GLF_pos_param : TEXCOORD0;
-};
-struct tint_symbol_2 {
- float4 frag_color_1 : TEXCOORD0;
- float4 gl_Position : SV_Position;
-};
-
-main_out main_inner(float4 x_GLF_pos_param) {
- x_GLF_pos = x_GLF_pos_param;
- main_1();
- const main_out tint_symbol_5 = {frag_color, gl_Position};
- return tint_symbol_5;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
- const main_out inner_result = main_inner(tint_symbol.x_GLF_pos_param);
- tint_symbol_2 wrapper_result = (tint_symbol_2)0;
- wrapper_result.frag_color_1 = inner_result.frag_color_1;
- wrapper_result.gl_Position = inner_result.gl_Position;
- return wrapper_result;
-}
-C:\src\tint\test\Shader@0x00000277FFA71560(133,7-22): warning X3550: array reference cannot be used as an l-value; not natively addressable, forcing loop to unroll
-C:\src\tint\test\Shader@0x00000277FFA71560(132,12-45): error X3531: can't unroll loops marked with loop attribute
-
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-quicksort-for-loop-with-injection/2-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/stable-quicksort-for-loop-with-injection/2-opt.wgsl.expected.hlsl
deleted file mode 100644
index c0c9cf2..0000000
--- a/test/vk-gl-cts/graphicsfuzz/stable-quicksort-for-loop-with-injection/2-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,238 +0,0 @@
-SKIP: FAILED
-
-struct QuicksortObject {
- int numbers[10];
-};
-
-static QuicksortObject obj = (QuicksortObject)0;
-static float4 x_GLF_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-static float4 x_GLF_pos = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_33 : register(b0, space0) {
- uint4 x_33[1];
-};
-cbuffer cbuffer_x_36 : register(b1, space0) {
- uint4 x_36[1];
-};
-static float4 frag_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-static float4 gl_Position = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void swap_i1_i1_(inout int i, inout int j) {
- int temp = 0;
- const int x_250 = i;
- const int x_252 = obj.numbers[x_250];
- temp = x_252;
- const int x_253 = i;
- const int x_254 = j;
- const int x_256 = obj.numbers[x_254];
- obj.numbers[x_253] = x_256;
- const int x_258 = j;
- obj.numbers[x_258] = temp;
- return;
-}
-
-int performPartition_i1_i1_(inout int l, inout int h) {
- int pivot = 0;
- int i_1 = 0;
- int j_1 = 0;
- int param = 0;
- int param_1 = 0;
- int param_2 = 0;
- int param_3 = 0;
- const int x_262 = h;
- const int x_264 = obj.numbers[x_262];
- pivot = x_264;
- const int x_265 = l;
- i_1 = (x_265 - 1);
- const int x_267 = l;
- j_1 = x_267;
- [loop] while (true) {
- const int x_272 = j_1;
- const int x_273 = h;
- if ((x_272 <= (x_273 - 1))) {
- } else {
- break;
- }
- const int x_279 = obj.numbers[j_1];
- if ((x_279 <= pivot)) {
- i_1 = (i_1 + 1);
- param = i_1;
- param_1 = j_1;
- swap_i1_i1_(param, param_1);
- }
- {
- j_1 = (j_1 + 1);
- }
- }
- param_2 = (i_1 + 1);
- const int x_293 = h;
- param_3 = x_293;
- swap_i1_i1_(param_2, param_3);
- return (i_1 + 1);
-}
-
-void quicksort_() {
- int l_1 = 0;
- int h_1 = 0;
- int top = 0;
- int stack[10] = (int[10])0;
- int p = 0;
- int param_4 = 0;
- int param_5 = 0;
- l_1 = 0;
- h_1 = 9;
- top = -1;
- const int x_299 = (top + 1);
- top = x_299;
- stack[x_299] = l_1;
- const int x_303 = (top + 1);
- top = x_303;
- stack[x_303] = h_1;
- [loop] while (true) {
- if ((top >= 0)) {
- } else {
- break;
- }
- const int x_313 = top;
- top = (x_313 - 1);
- const int x_316 = stack[x_313];
- h_1 = x_316;
- const int x_317 = top;
- top = (x_317 - 1);
- const int x_320 = stack[x_317];
- l_1 = x_320;
- param_4 = l_1;
- param_5 = h_1;
- const int x_323 = performPartition_i1_i1_(param_4, param_5);
- p = x_323;
- if (((p - 1) > l_1)) {
- const int x_331 = (top + 1);
- top = x_331;
- stack[x_331] = l_1;
- const int x_335 = (top + 1);
- top = x_335;
- stack[x_335] = (p - 1);
- }
- if (((p + 1) < h_1)) {
- const int x_346 = (top + 1);
- top = x_346;
- stack[x_346] = (p + 1);
- const int x_351 = (top + 1);
- top = x_351;
- stack[x_351] = h_1;
- }
- }
- return;
-}
-
-void main_1() {
- int i_2 = 0;
- float2 uv = float2(0.0f, 0.0f);
- float3 color = float3(0.0f, 0.0f, 0.0f);
- x_GLF_FragCoord = ((x_GLF_pos + float4(1.0f, 1.0f, 0.0f, 0.0f)) * float4(128.0f, 128.0f, 1.0f, 1.0f));
- i_2 = 0;
- {
- [loop] for(; (i_2 < 10); i_2 = (i_2 + 1)) {
- obj.numbers[i_2] = (10 - i_2);
- const float x_109 = asfloat(x_33[0].x);
- const float x_111 = asfloat(x_33[0].y);
- if ((x_109 > x_111)) {
- break;
- }
- const int x_115 = i_2;
- const int x_118 = obj.numbers[i_2];
- const int x_121 = obj.numbers[i_2];
- obj.numbers[x_115] = (x_118 * x_121);
- }
- }
- quicksort_();
- const float4 x_127 = x_GLF_FragCoord;
- const float2 x_130 = asfloat(x_36[0].xy);
- uv = (float2(x_127.x, x_127.y) / x_130);
- color = float3(1.0f, 2.0f, 3.0f);
- const int x_133 = obj.numbers[0];
- const float x_136 = color.x;
- color.x = (x_136 + float(x_133));
- const float x_140 = uv.x;
- if ((x_140 > 0.25f)) {
- const int x_145 = obj.numbers[1];
- const float x_148 = color.x;
- color.x = (x_148 + float(x_145));
- }
- const float x_152 = uv.x;
- if ((x_152 > 0.5f)) {
- const int x_157 = obj.numbers[2];
- const float x_160 = color.y;
- color.y = (x_160 + float(x_157));
- }
- const float x_164 = uv.x;
- if ((x_164 > 0.75f)) {
- const int x_169 = obj.numbers[3];
- const float x_172 = color.z;
- color.z = (x_172 + float(x_169));
- }
- const int x_176 = obj.numbers[4];
- const float x_179 = color.y;
- color.y = (x_179 + float(x_176));
- const float x_183 = uv.y;
- if ((x_183 > 0.25f)) {
- const int x_188 = obj.numbers[5];
- const float x_191 = color.x;
- color.x = (x_191 + float(x_188));
- }
- const float x_195 = uv.y;
- if ((x_195 > 0.5f)) {
- const int x_200 = obj.numbers[6];
- const float x_203 = color.y;
- color.y = (x_203 + float(x_200));
- }
- const float x_207 = uv.y;
- if ((x_207 > 0.75f)) {
- const int x_212 = obj.numbers[7];
- const float x_215 = color.z;
- color.z = (x_215 + float(x_212));
- }
- const int x_219 = obj.numbers[8];
- const float x_222 = color.z;
- color.z = (x_222 + float(x_219));
- const float x_226 = uv.x;
- const float x_228 = uv.y;
- if ((abs((x_226 - x_228)) < 0.25f)) {
- const int x_235 = obj.numbers[9];
- const float x_238 = color.x;
- color.x = (x_238 + float(x_235));
- }
- const float3 x_242 = normalize(color);
- frag_color = float4(x_242.x, x_242.y, x_242.z, 1.0f);
- gl_Position = x_GLF_pos;
- return;
-}
-
-struct main_out {
- float4 frag_color_1;
- float4 gl_Position;
-};
-struct tint_symbol_1 {
- float4 x_GLF_pos_param : TEXCOORD0;
-};
-struct tint_symbol_2 {
- float4 frag_color_1 : TEXCOORD0;
- float4 gl_Position : SV_Position;
-};
-
-main_out main_inner(float4 x_GLF_pos_param) {
- x_GLF_pos = x_GLF_pos_param;
- main_1();
- const main_out tint_symbol_5 = {frag_color, gl_Position};
- return tint_symbol_5;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
- const main_out inner_result = main_inner(tint_symbol.x_GLF_pos_param);
- tint_symbol_2 wrapper_result = (tint_symbol_2)0;
- wrapper_result.frag_color_1 = inner_result.frag_color_1;
- wrapper_result.gl_Position = inner_result.gl_Position;
- return wrapper_result;
-}
-C:\src\tint\test\Shader@0x000001A3B2C08520(133,7-22): warning X3550: array reference cannot be used as an l-value; not natively addressable, forcing loop to unroll
-C:\src\tint\test\Shader@0x000001A3B2C08520(132,12-45): error X3531: can't unroll loops marked with loop attribute
-
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-quicksort-if-false-else-return/0.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/stable-quicksort-if-false-else-return/0.spvasm.expected.hlsl
deleted file mode 100644
index 9867861..0000000
--- a/test/vk-gl-cts/graphicsfuzz/stable-quicksort-if-false-else-return/0.spvasm.expected.hlsl
+++ /dev/null
@@ -1,317 +0,0 @@
-SKIP: FAILED
-
-struct QuicksortObject {
- int numbers[10];
-};
-
-static QuicksortObject obj = (QuicksortObject)0;
-static float4 x_GLF_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-static float4 x_GLF_pos = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_34 : register(b0, space0) {
- uint4 x_34[1];
-};
-static float4 frag_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-static float4 gl_Position = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
- int x_90 = 0;
- int x_91 = 0;
- int x_92 = 0;
- int x_93 = 0;
- int x_94 = 0;
- int x_95 = 0;
- int x_96 = 0;
- int x_97 = 0;
- int x_98 = 0;
- int x_99 = 0;
- int x_100 = 0;
- int x_101 = 0;
- int x_102 = 0;
- int x_103[10] = (int[10])0;
- int x_104 = 0;
- int x_105 = 0;
- int x_106 = 0;
- int i_2 = 0;
- float2 uv = float2(0.0f, 0.0f);
- float3 color = float3(0.0f, 0.0f, 0.0f);
- x_GLF_FragCoord = ((x_GLF_pos + float4(1.0f, 1.0f, 0.0f, 0.0f)) * float4(128.0f, 128.0f, 1.0f, 1.0f));
- i_2 = 0;
- {
- [loop] for(; (i_2 < 10); i_2 = (i_2 + 1)) {
- obj.numbers[i_2] = (10 - i_2);
- const int x_121 = i_2;
- const int x_124 = obj.numbers[i_2];
- const int x_127 = obj.numbers[i_2];
- obj.numbers[x_121] = (x_124 * x_127);
- }
- }
- x_100 = 0;
- x_101 = 9;
- x_102 = -1;
- const int x_133 = (x_102 + 1);
- x_102 = x_133;
- x_103[x_133] = x_100;
- const int x_137 = (x_102 + 1);
- x_102 = x_137;
- x_103[x_137] = x_101;
- [loop] while (true) {
- if ((x_102 >= 0)) {
- } else {
- break;
- }
- const int x_147 = x_102;
- x_102 = (x_147 - 1);
- const int x_150 = x_103[x_147];
- x_101 = x_150;
- const int x_151 = x_102;
- x_102 = (x_151 - 1);
- const int x_154 = x_103[x_151];
- x_100 = x_154;
- x_105 = x_100;
- x_106 = x_101;
- const int x_159 = obj.numbers[x_106];
- x_92 = x_159;
- x_93 = (x_105 - 1);
- x_94 = x_105;
- {
- [loop] for(; (x_94 <= (x_106 - 1)); x_94 = (x_94 + 1)) {
- const int x_174 = obj.numbers[x_94];
- if ((x_174 <= x_92)) {
- x_93 = (x_93 + 1);
- x_95 = x_93;
- x_96 = x_94;
- const int x_185 = obj.numbers[x_95];
- x_91 = x_185;
- const int x_186 = x_95;
- const int x_189 = obj.numbers[x_96];
- obj.numbers[x_186] = x_189;
- obj.numbers[x_96] = x_91;
- }
- }
- }
- x_97 = (x_93 + 1);
- x_98 = x_106;
- const int x_201 = obj.numbers[x_97];
- x_90 = x_201;
- const int x_202 = x_97;
- const int x_205 = obj.numbers[x_98];
- obj.numbers[x_202] = x_205;
- obj.numbers[x_98] = x_90;
- x_99 = (x_93 + 1);
- x_104 = x_99;
- if (((x_104 - 1) > x_100)) {
- const int x_220 = (x_102 + 1);
- x_102 = x_220;
- x_103[x_220] = x_100;
- const int x_224 = (x_102 + 1);
- x_102 = x_224;
- x_103[x_224] = (x_104 - 1);
- }
- if (((x_104 + 1) < x_101)) {
- const int x_235 = (x_102 + 1);
- x_102 = x_235;
- x_103[x_235] = (x_104 + 1);
- const int x_240 = (x_102 + 1);
- x_102 = x_240;
- x_103[x_240] = x_101;
- }
- }
- const float4 x_243 = x_GLF_FragCoord;
- const float2 x_246 = asfloat(x_34[0].xy);
- uv = (float2(x_243.x, x_243.y) / x_246);
- color = float3(1.0f, 2.0f, 3.0f);
- const int x_249 = obj.numbers[0];
- const float x_252 = color.x;
- color.x = (x_252 + float(x_249));
- const float x_256 = uv.x;
- if ((x_256 > 0.25f)) {
- const int x_261 = obj.numbers[1];
- const float x_264 = color.x;
- color.x = (x_264 + float(x_261));
- }
- const float x_268 = uv.x;
- if ((x_268 > 0.5f)) {
- const int x_273 = obj.numbers[2];
- const float x_276 = color.y;
- color.y = (x_276 + float(x_273));
- }
- const float x_280 = uv.x;
- if ((x_280 > 0.75f)) {
- const int x_285 = obj.numbers[3];
- const float x_288 = color.z;
- color.z = (x_288 + float(x_285));
- }
- const int x_292 = obj.numbers[4];
- const float x_295 = color.y;
- color.y = (x_295 + float(x_292));
- const float x_299 = uv.y;
- if ((x_299 > 0.25f)) {
- const int x_304 = obj.numbers[5];
- const float x_307 = color.x;
- color.x = (x_307 + float(x_304));
- }
- const float x_311 = uv.y;
- if ((x_311 > 0.5f)) {
- const int x_316 = obj.numbers[6];
- const float x_319 = color.y;
- color.y = (x_319 + float(x_316));
- }
- const float x_323 = uv.y;
- if ((x_323 > 0.75f)) {
- const int x_328 = obj.numbers[7];
- const float x_331 = color.z;
- color.z = (x_331 + float(x_328));
- }
- const int x_335 = obj.numbers[8];
- const float x_338 = color.z;
- color.z = (x_338 + float(x_335));
- const float x_342 = uv.x;
- const float x_344 = uv.y;
- if ((abs((x_342 - x_344)) < 0.25f)) {
- const int x_351 = obj.numbers[9];
- const float x_354 = color.x;
- color.x = (x_354 + float(x_351));
- }
- const float3 x_358 = normalize(color);
- frag_color = float4(x_358.x, x_358.y, x_358.z, 1.0f);
- gl_Position = x_GLF_pos;
- return;
-}
-
-struct main_out {
- float4 frag_color_1;
- float4 gl_Position;
-};
-struct tint_symbol_1 {
- float4 x_GLF_pos_param : TEXCOORD0;
-};
-struct tint_symbol_2 {
- float4 frag_color_1 : TEXCOORD0;
- float4 gl_Position : SV_Position;
-};
-
-main_out main_inner(float4 x_GLF_pos_param) {
- x_GLF_pos = x_GLF_pos_param;
- main_1();
- const main_out tint_symbol_4 = {frag_color, gl_Position};
- return tint_symbol_4;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
- const main_out inner_result = main_inner(tint_symbol.x_GLF_pos_param);
- tint_symbol_2 wrapper_result = (tint_symbol_2)0;
- wrapper_result.frag_color_1 = inner_result.frag_color_1;
- wrapper_result.gl_Position = inner_result.gl_Position;
- return wrapper_result;
-}
-
-void swap_i1_i1_(inout int i, inout int j) {
- int temp = 0;
- const int x_366 = i;
- const int x_368 = obj.numbers[x_366];
- temp = x_368;
- const int x_369 = i;
- const int x_370 = j;
- const int x_372 = obj.numbers[x_370];
- obj.numbers[x_369] = x_372;
- const int x_374 = j;
- obj.numbers[x_374] = temp;
- return;
-}
-
-int performPartition_i1_i1_(inout int l, inout int h) {
- int pivot = 0;
- int i_1 = 0;
- int j_1 = 0;
- int param = 0;
- int param_1 = 0;
- int param_2 = 0;
- int param_3 = 0;
- const int x_378 = h;
- const int x_380 = obj.numbers[x_378];
- pivot = x_380;
- const int x_381 = l;
- i_1 = (x_381 - 1);
- const int x_383 = l;
- j_1 = x_383;
- [loop] while (true) {
- const int x_388 = j_1;
- const int x_389 = h;
- if ((x_388 <= (x_389 - 1))) {
- } else {
- break;
- }
- const int x_395 = obj.numbers[j_1];
- if ((x_395 <= pivot)) {
- i_1 = (i_1 + 1);
- param = i_1;
- param_1 = j_1;
- swap_i1_i1_(param, param_1);
- }
- {
- j_1 = (j_1 + 1);
- }
- }
- param_2 = (i_1 + 1);
- const int x_409 = h;
- param_3 = x_409;
- swap_i1_i1_(param_2, param_3);
- return (i_1 + 1);
-}
-
-void quicksort_() {
- int l_1 = 0;
- int h_1 = 0;
- int top = 0;
- int stack[10] = (int[10])0;
- int p = 0;
- int param_4 = 0;
- int param_5 = 0;
- l_1 = 0;
- h_1 = 9;
- top = -1;
- const int x_415 = (top + 1);
- top = x_415;
- stack[x_415] = l_1;
- const int x_419 = (top + 1);
- top = x_419;
- stack[x_419] = h_1;
- [loop] while (true) {
- if ((top >= 0)) {
- } else {
- break;
- }
- const int x_429 = top;
- top = (x_429 - 1);
- const int x_432 = stack[x_429];
- h_1 = x_432;
- const int x_433 = top;
- top = (x_433 - 1);
- const int x_436 = stack[x_433];
- l_1 = x_436;
- param_4 = l_1;
- param_5 = h_1;
- const int x_439 = performPartition_i1_i1_(param_4, param_5);
- p = x_439;
- if (((p - 1) > l_1)) {
- const int x_447 = (top + 1);
- top = x_447;
- stack[x_447] = l_1;
- const int x_451 = (top + 1);
- top = x_451;
- stack[x_451] = (p - 1);
- }
- if (((p + 1) < h_1)) {
- const int x_462 = (top + 1);
- top = x_462;
- stack[x_462] = (p + 1);
- const int x_467 = (top + 1);
- top = x_467;
- stack[x_467] = h_1;
- }
- }
- return;
-}
-C:\src\tint\test\Shader@0x0000028832314060(39,7-22): warning X3550: array reference cannot be used as an l-value; not natively addressable, forcing loop to unroll
-C:\src\tint\test\Shader@0x0000028832314060(38,12-45): error X3531: can't unroll loops marked with loop attribute
-
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-quicksort-if-false-else-return/0.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/stable-quicksort-if-false-else-return/0.wgsl.expected.hlsl
deleted file mode 100644
index 0727d5b..0000000
--- a/test/vk-gl-cts/graphicsfuzz/stable-quicksort-if-false-else-return/0.wgsl.expected.hlsl
+++ /dev/null
@@ -1,317 +0,0 @@
-SKIP: FAILED
-
-struct QuicksortObject {
- int numbers[10];
-};
-
-static QuicksortObject obj = (QuicksortObject)0;
-static float4 x_GLF_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-static float4 x_GLF_pos = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_34 : register(b0, space0) {
- uint4 x_34[1];
-};
-static float4 frag_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-static float4 gl_Position = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void main_1() {
- int x_90 = 0;
- int x_91 = 0;
- int x_92 = 0;
- int x_93 = 0;
- int x_94 = 0;
- int x_95 = 0;
- int x_96 = 0;
- int x_97 = 0;
- int x_98 = 0;
- int x_99 = 0;
- int x_100 = 0;
- int x_101 = 0;
- int x_102 = 0;
- int x_103[10] = (int[10])0;
- int x_104 = 0;
- int x_105 = 0;
- int x_106 = 0;
- int i_2 = 0;
- float2 uv = float2(0.0f, 0.0f);
- float3 color = float3(0.0f, 0.0f, 0.0f);
- x_GLF_FragCoord = ((x_GLF_pos + float4(1.0f, 1.0f, 0.0f, 0.0f)) * float4(128.0f, 128.0f, 1.0f, 1.0f));
- i_2 = 0;
- {
- [loop] for(; (i_2 < 10); i_2 = (i_2 + 1)) {
- obj.numbers[i_2] = (10 - i_2);
- const int x_121 = i_2;
- const int x_124 = obj.numbers[i_2];
- const int x_127 = obj.numbers[i_2];
- obj.numbers[x_121] = (x_124 * x_127);
- }
- }
- x_100 = 0;
- x_101 = 9;
- x_102 = -1;
- const int x_133 = (x_102 + 1);
- x_102 = x_133;
- x_103[x_133] = x_100;
- const int x_137 = (x_102 + 1);
- x_102 = x_137;
- x_103[x_137] = x_101;
- [loop] while (true) {
- if ((x_102 >= 0)) {
- } else {
- break;
- }
- const int x_147 = x_102;
- x_102 = (x_147 - 1);
- const int x_150 = x_103[x_147];
- x_101 = x_150;
- const int x_151 = x_102;
- x_102 = (x_151 - 1);
- const int x_154 = x_103[x_151];
- x_100 = x_154;
- x_105 = x_100;
- x_106 = x_101;
- const int x_159 = obj.numbers[x_106];
- x_92 = x_159;
- x_93 = (x_105 - 1);
- x_94 = x_105;
- {
- [loop] for(; (x_94 <= (x_106 - 1)); x_94 = (x_94 + 1)) {
- const int x_174 = obj.numbers[x_94];
- if ((x_174 <= x_92)) {
- x_93 = (x_93 + 1);
- x_95 = x_93;
- x_96 = x_94;
- const int x_185 = obj.numbers[x_95];
- x_91 = x_185;
- const int x_186 = x_95;
- const int x_189 = obj.numbers[x_96];
- obj.numbers[x_186] = x_189;
- obj.numbers[x_96] = x_91;
- }
- }
- }
- x_97 = (x_93 + 1);
- x_98 = x_106;
- const int x_201 = obj.numbers[x_97];
- x_90 = x_201;
- const int x_202 = x_97;
- const int x_205 = obj.numbers[x_98];
- obj.numbers[x_202] = x_205;
- obj.numbers[x_98] = x_90;
- x_99 = (x_93 + 1);
- x_104 = x_99;
- if (((x_104 - 1) > x_100)) {
- const int x_220 = (x_102 + 1);
- x_102 = x_220;
- x_103[x_220] = x_100;
- const int x_224 = (x_102 + 1);
- x_102 = x_224;
- x_103[x_224] = (x_104 - 1);
- }
- if (((x_104 + 1) < x_101)) {
- const int x_235 = (x_102 + 1);
- x_102 = x_235;
- x_103[x_235] = (x_104 + 1);
- const int x_240 = (x_102 + 1);
- x_102 = x_240;
- x_103[x_240] = x_101;
- }
- }
- const float4 x_243 = x_GLF_FragCoord;
- const float2 x_246 = asfloat(x_34[0].xy);
- uv = (float2(x_243.x, x_243.y) / x_246);
- color = float3(1.0f, 2.0f, 3.0f);
- const int x_249 = obj.numbers[0];
- const float x_252 = color.x;
- color.x = (x_252 + float(x_249));
- const float x_256 = uv.x;
- if ((x_256 > 0.25f)) {
- const int x_261 = obj.numbers[1];
- const float x_264 = color.x;
- color.x = (x_264 + float(x_261));
- }
- const float x_268 = uv.x;
- if ((x_268 > 0.5f)) {
- const int x_273 = obj.numbers[2];
- const float x_276 = color.y;
- color.y = (x_276 + float(x_273));
- }
- const float x_280 = uv.x;
- if ((x_280 > 0.75f)) {
- const int x_285 = obj.numbers[3];
- const float x_288 = color.z;
- color.z = (x_288 + float(x_285));
- }
- const int x_292 = obj.numbers[4];
- const float x_295 = color.y;
- color.y = (x_295 + float(x_292));
- const float x_299 = uv.y;
- if ((x_299 > 0.25f)) {
- const int x_304 = obj.numbers[5];
- const float x_307 = color.x;
- color.x = (x_307 + float(x_304));
- }
- const float x_311 = uv.y;
- if ((x_311 > 0.5f)) {
- const int x_316 = obj.numbers[6];
- const float x_319 = color.y;
- color.y = (x_319 + float(x_316));
- }
- const float x_323 = uv.y;
- if ((x_323 > 0.75f)) {
- const int x_328 = obj.numbers[7];
- const float x_331 = color.z;
- color.z = (x_331 + float(x_328));
- }
- const int x_335 = obj.numbers[8];
- const float x_338 = color.z;
- color.z = (x_338 + float(x_335));
- const float x_342 = uv.x;
- const float x_344 = uv.y;
- if ((abs((x_342 - x_344)) < 0.25f)) {
- const int x_351 = obj.numbers[9];
- const float x_354 = color.x;
- color.x = (x_354 + float(x_351));
- }
- const float3 x_358 = normalize(color);
- frag_color = float4(x_358.x, x_358.y, x_358.z, 1.0f);
- gl_Position = x_GLF_pos;
- return;
-}
-
-struct main_out {
- float4 frag_color_1;
- float4 gl_Position;
-};
-struct tint_symbol_1 {
- float4 x_GLF_pos_param : TEXCOORD0;
-};
-struct tint_symbol_2 {
- float4 frag_color_1 : TEXCOORD0;
- float4 gl_Position : SV_Position;
-};
-
-main_out main_inner(float4 x_GLF_pos_param) {
- x_GLF_pos = x_GLF_pos_param;
- main_1();
- const main_out tint_symbol_4 = {frag_color, gl_Position};
- return tint_symbol_4;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
- const main_out inner_result = main_inner(tint_symbol.x_GLF_pos_param);
- tint_symbol_2 wrapper_result = (tint_symbol_2)0;
- wrapper_result.frag_color_1 = inner_result.frag_color_1;
- wrapper_result.gl_Position = inner_result.gl_Position;
- return wrapper_result;
-}
-
-void swap_i1_i1_(inout int i, inout int j) {
- int temp = 0;
- const int x_366 = i;
- const int x_368 = obj.numbers[x_366];
- temp = x_368;
- const int x_369 = i;
- const int x_370 = j;
- const int x_372 = obj.numbers[x_370];
- obj.numbers[x_369] = x_372;
- const int x_374 = j;
- obj.numbers[x_374] = temp;
- return;
-}
-
-int performPartition_i1_i1_(inout int l, inout int h) {
- int pivot = 0;
- int i_1 = 0;
- int j_1 = 0;
- int param = 0;
- int param_1 = 0;
- int param_2 = 0;
- int param_3 = 0;
- const int x_378 = h;
- const int x_380 = obj.numbers[x_378];
- pivot = x_380;
- const int x_381 = l;
- i_1 = (x_381 - 1);
- const int x_383 = l;
- j_1 = x_383;
- [loop] while (true) {
- const int x_388 = j_1;
- const int x_389 = h;
- if ((x_388 <= (x_389 - 1))) {
- } else {
- break;
- }
- const int x_395 = obj.numbers[j_1];
- if ((x_395 <= pivot)) {
- i_1 = (i_1 + 1);
- param = i_1;
- param_1 = j_1;
- swap_i1_i1_(param, param_1);
- }
- {
- j_1 = (j_1 + 1);
- }
- }
- param_2 = (i_1 + 1);
- const int x_409 = h;
- param_3 = x_409;
- swap_i1_i1_(param_2, param_3);
- return (i_1 + 1);
-}
-
-void quicksort_() {
- int l_1 = 0;
- int h_1 = 0;
- int top = 0;
- int stack[10] = (int[10])0;
- int p = 0;
- int param_4 = 0;
- int param_5 = 0;
- l_1 = 0;
- h_1 = 9;
- top = -1;
- const int x_415 = (top + 1);
- top = x_415;
- stack[x_415] = l_1;
- const int x_419 = (top + 1);
- top = x_419;
- stack[x_419] = h_1;
- [loop] while (true) {
- if ((top >= 0)) {
- } else {
- break;
- }
- const int x_429 = top;
- top = (x_429 - 1);
- const int x_432 = stack[x_429];
- h_1 = x_432;
- const int x_433 = top;
- top = (x_433 - 1);
- const int x_436 = stack[x_433];
- l_1 = x_436;
- param_4 = l_1;
- param_5 = h_1;
- const int x_439 = performPartition_i1_i1_(param_4, param_5);
- p = x_439;
- if (((p - 1) > l_1)) {
- const int x_447 = (top + 1);
- top = x_447;
- stack[x_447] = l_1;
- const int x_451 = (top + 1);
- top = x_451;
- stack[x_451] = (p - 1);
- }
- if (((p + 1) < h_1)) {
- const int x_462 = (top + 1);
- top = x_462;
- stack[x_462] = (p + 1);
- const int x_467 = (top + 1);
- top = x_467;
- stack[x_467] = h_1;
- }
- }
- return;
-}
-C:\src\tint\test\Shader@0x0000028832C83FA0(39,7-22): warning X3550: array reference cannot be used as an l-value; not natively addressable, forcing loop to unroll
-C:\src\tint\test\Shader@0x0000028832C83FA0(38,12-45): error X3531: can't unroll loops marked with loop attribute
-
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-quicksort-if-false-else-return/2.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/stable-quicksort-if-false-else-return/2.spvasm.expected.hlsl
deleted file mode 100644
index cb5a691..0000000
--- a/test/vk-gl-cts/graphicsfuzz/stable-quicksort-if-false-else-return/2.spvasm.expected.hlsl
+++ /dev/null
@@ -1,295 +0,0 @@
-SKIP: FAILED
-
-struct QuicksortObject {
- int numbers[10];
-};
-
-static QuicksortObject obj = (QuicksortObject)0;
-static float4 x_GLF_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-static float4 x_GLF_pos = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_34 : register(b0, space0) {
- uint4 x_34[1];
-};
-static float4 frag_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-static float4 gl_Position = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-int performPartition_i1_i1_(inout int l, inout int h) {
- int x_314 = 0;
- int x_315 = 0;
- int pivot = 0;
- int i_1 = 0;
- int j_1 = 0;
- int param = 0;
- int param_1 = 0;
- int param_2 = 0;
- int param_3 = 0;
- const int x_316 = h;
- const int x_318 = obj.numbers[x_316];
- pivot = x_318;
- const int x_319 = l;
- i_1 = (x_319 - 1);
- const int x_321 = l;
- j_1 = x_321;
- [loop] while (true) {
- const int x_326 = j_1;
- const int x_327 = h;
- if ((x_326 <= (x_327 - 1))) {
- } else {
- break;
- }
- const int x_333 = obj.numbers[j_1];
- if ((x_333 <= pivot)) {
- i_1 = (i_1 + 1);
- param = i_1;
- param_1 = j_1;
- const int x_344 = obj.numbers[param];
- x_315 = x_344;
- const int x_345 = param;
- const int x_348 = obj.numbers[param_1];
- obj.numbers[x_345] = x_348;
- obj.numbers[param_1] = x_315;
- }
- {
- j_1 = (j_1 + 1);
- }
- }
- param_2 = (i_1 + 1);
- const int x_357 = h;
- param_3 = x_357;
- const int x_360 = obj.numbers[param_2];
- x_314 = x_360;
- const int x_361 = param_2;
- const int x_364 = obj.numbers[param_3];
- obj.numbers[x_361] = x_364;
- obj.numbers[param_3] = x_314;
- if (false) {
- } else {
- return (i_1 + 1);
- }
- return 0;
-}
-
-void main_1() {
- int x_91 = 0;
- int x_92 = 0;
- int x_93 = 0;
- int x_94[10] = (int[10])0;
- int x_95 = 0;
- int x_96 = 0;
- int x_97 = 0;
- int i_2 = 0;
- float2 uv = float2(0.0f, 0.0f);
- float3 color = float3(0.0f, 0.0f, 0.0f);
- x_GLF_FragCoord = ((x_GLF_pos + float4(1.0f, 1.0f, 0.0f, 0.0f)) * float4(128.0f, 128.0f, 1.0f, 1.0f));
- i_2 = 0;
- {
- [loop] for(; (i_2 < 10); i_2 = (i_2 + 1)) {
- obj.numbers[i_2] = (10 - i_2);
- const int x_112 = i_2;
- const int x_115 = obj.numbers[i_2];
- const int x_118 = obj.numbers[i_2];
- obj.numbers[x_112] = (x_115 * x_118);
- }
- }
- x_91 = 0;
- x_92 = 9;
- x_93 = -1;
- const int x_124 = (x_93 + 1);
- x_93 = x_124;
- x_94[x_124] = x_91;
- const int x_128 = (x_93 + 1);
- x_93 = x_128;
- x_94[x_128] = x_92;
- [loop] while (true) {
- if ((x_93 >= 0)) {
- } else {
- break;
- }
- const int x_138 = x_93;
- x_93 = (x_138 - 1);
- const int x_141 = x_94[x_138];
- x_92 = x_141;
- const int x_142 = x_93;
- x_93 = (x_142 - 1);
- const int x_145 = x_94[x_142];
- x_91 = x_145;
- x_96 = x_91;
- x_97 = x_92;
- const int x_148 = performPartition_i1_i1_(x_96, x_97);
- x_95 = x_148;
- if (((x_95 - 1) > x_91)) {
- const int x_156 = (x_93 + 1);
- x_93 = x_156;
- x_94[x_156] = x_91;
- const int x_160 = (x_93 + 1);
- x_93 = x_160;
- x_94[x_160] = (x_95 - 1);
- }
- if (((x_95 + 1) < x_92)) {
- const int x_171 = (x_93 + 1);
- x_93 = x_171;
- x_94[x_171] = (x_95 + 1);
- const int x_176 = (x_93 + 1);
- x_93 = x_176;
- x_94[x_176] = x_92;
- }
- }
- const float4 x_179 = x_GLF_FragCoord;
- const float2 x_182 = asfloat(x_34[0].xy);
- uv = (float2(x_179.x, x_179.y) / x_182);
- color = float3(1.0f, 2.0f, 3.0f);
- const int x_185 = obj.numbers[0];
- const float x_188 = color.x;
- color.x = (x_188 + float(x_185));
- const float x_192 = uv.x;
- if ((x_192 > 0.25f)) {
- const int x_197 = obj.numbers[1];
- const float x_200 = color.x;
- color.x = (x_200 + float(x_197));
- }
- const float x_204 = uv.x;
- if ((x_204 > 0.5f)) {
- const int x_209 = obj.numbers[2];
- const float x_212 = color.y;
- color.y = (x_212 + float(x_209));
- }
- const float x_216 = uv.x;
- if ((x_216 > 0.75f)) {
- const int x_221 = obj.numbers[3];
- const float x_224 = color.z;
- color.z = (x_224 + float(x_221));
- }
- const int x_228 = obj.numbers[4];
- const float x_231 = color.y;
- color.y = (x_231 + float(x_228));
- const float x_235 = uv.y;
- if ((x_235 > 0.25f)) {
- const int x_240 = obj.numbers[5];
- const float x_243 = color.x;
- color.x = (x_243 + float(x_240));
- }
- const float x_247 = uv.y;
- if ((x_247 > 0.5f)) {
- const int x_252 = obj.numbers[6];
- const float x_255 = color.y;
- color.y = (x_255 + float(x_252));
- }
- const float x_259 = uv.y;
- if ((x_259 > 0.75f)) {
- const int x_264 = obj.numbers[7];
- const float x_267 = color.z;
- color.z = (x_267 + float(x_264));
- }
- const int x_271 = obj.numbers[8];
- const float x_274 = color.z;
- color.z = (x_274 + float(x_271));
- const float x_278 = uv.x;
- const float x_280 = uv.y;
- if ((abs((x_278 - x_280)) < 0.25f)) {
- const int x_287 = obj.numbers[9];
- const float x_290 = color.x;
- color.x = (x_290 + float(x_287));
- }
- const float3 x_294 = normalize(color);
- frag_color = float4(x_294.x, x_294.y, x_294.z, 1.0f);
- gl_Position = x_GLF_pos;
- return;
-}
-
-struct main_out {
- float4 frag_color_1;
- float4 gl_Position;
-};
-struct tint_symbol_1 {
- float4 x_GLF_pos_param : TEXCOORD0;
-};
-struct tint_symbol_2 {
- float4 frag_color_1 : TEXCOORD0;
- float4 gl_Position : SV_Position;
-};
-
-main_out main_inner(float4 x_GLF_pos_param) {
- x_GLF_pos = x_GLF_pos_param;
- main_1();
- const main_out tint_symbol_4 = {frag_color, gl_Position};
- return tint_symbol_4;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
- const main_out inner_result = main_inner(tint_symbol.x_GLF_pos_param);
- tint_symbol_2 wrapper_result = (tint_symbol_2)0;
- wrapper_result.frag_color_1 = inner_result.frag_color_1;
- wrapper_result.gl_Position = inner_result.gl_Position;
- return wrapper_result;
-}
-
-void swap_i1_i1_(inout int i, inout int j) {
- int temp = 0;
- const int x_302 = i;
- const int x_304 = obj.numbers[x_302];
- temp = x_304;
- const int x_305 = i;
- const int x_306 = j;
- const int x_308 = obj.numbers[x_306];
- obj.numbers[x_305] = x_308;
- const int x_310 = j;
- obj.numbers[x_310] = temp;
- return;
-}
-
-void quicksort_() {
- int l_1 = 0;
- int h_1 = 0;
- int top = 0;
- int stack[10] = (int[10])0;
- int p = 0;
- int param_4 = 0;
- int param_5 = 0;
- l_1 = 0;
- h_1 = 9;
- top = -1;
- const int x_377 = (top + 1);
- top = x_377;
- stack[x_377] = l_1;
- const int x_381 = (top + 1);
- top = x_381;
- stack[x_381] = h_1;
- [loop] while (true) {
- if ((top >= 0)) {
- } else {
- break;
- }
- const int x_391 = top;
- top = (x_391 - 1);
- const int x_394 = stack[x_391];
- h_1 = x_394;
- const int x_395 = top;
- top = (x_395 - 1);
- const int x_398 = stack[x_395];
- l_1 = x_398;
- param_4 = l_1;
- param_5 = h_1;
- const int x_401 = performPartition_i1_i1_(param_4, param_5);
- p = x_401;
- if (((p - 1) > l_1)) {
- const int x_409 = (top + 1);
- top = x_409;
- stack[x_409] = l_1;
- const int x_413 = (top + 1);
- top = x_413;
- stack[x_413] = (p - 1);
- }
- if (((p + 1) < h_1)) {
- const int x_424 = (top + 1);
- top = x_424;
- stack[x_424] = (p + 1);
- const int x_429 = (top + 1);
- top = x_429;
- stack[x_429] = h_1;
- }
- }
- return;
-}
-C:\src\tint\test\Shader@0x000002B401B06060(85,7-22): warning X3550: array reference cannot be used as an l-value; not natively addressable, forcing loop to unroll
-C:\src\tint\test\Shader@0x000002B401B06060(84,12-45): error X3531: can't unroll loops marked with loop attribute
-
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-quicksort-if-false-else-return/2.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/stable-quicksort-if-false-else-return/2.wgsl.expected.hlsl
deleted file mode 100644
index d7f564d..0000000
--- a/test/vk-gl-cts/graphicsfuzz/stable-quicksort-if-false-else-return/2.wgsl.expected.hlsl
+++ /dev/null
@@ -1,295 +0,0 @@
-SKIP: FAILED
-
-struct QuicksortObject {
- int numbers[10];
-};
-
-static QuicksortObject obj = (QuicksortObject)0;
-static float4 x_GLF_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-static float4 x_GLF_pos = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_34 : register(b0, space0) {
- uint4 x_34[1];
-};
-static float4 frag_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-static float4 gl_Position = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-int performPartition_i1_i1_(inout int l, inout int h) {
- int x_314 = 0;
- int x_315 = 0;
- int pivot = 0;
- int i_1 = 0;
- int j_1 = 0;
- int param = 0;
- int param_1 = 0;
- int param_2 = 0;
- int param_3 = 0;
- const int x_316 = h;
- const int x_318 = obj.numbers[x_316];
- pivot = x_318;
- const int x_319 = l;
- i_1 = (x_319 - 1);
- const int x_321 = l;
- j_1 = x_321;
- [loop] while (true) {
- const int x_326 = j_1;
- const int x_327 = h;
- if ((x_326 <= (x_327 - 1))) {
- } else {
- break;
- }
- const int x_333 = obj.numbers[j_1];
- if ((x_333 <= pivot)) {
- i_1 = (i_1 + 1);
- param = i_1;
- param_1 = j_1;
- const int x_344 = obj.numbers[param];
- x_315 = x_344;
- const int x_345 = param;
- const int x_348 = obj.numbers[param_1];
- obj.numbers[x_345] = x_348;
- obj.numbers[param_1] = x_315;
- }
- {
- j_1 = (j_1 + 1);
- }
- }
- param_2 = (i_1 + 1);
- const int x_357 = h;
- param_3 = x_357;
- const int x_360 = obj.numbers[param_2];
- x_314 = x_360;
- const int x_361 = param_2;
- const int x_364 = obj.numbers[param_3];
- obj.numbers[x_361] = x_364;
- obj.numbers[param_3] = x_314;
- if (false) {
- } else {
- return (i_1 + 1);
- }
- return 0;
-}
-
-void main_1() {
- int x_91 = 0;
- int x_92 = 0;
- int x_93 = 0;
- int x_94[10] = (int[10])0;
- int x_95 = 0;
- int x_96 = 0;
- int x_97 = 0;
- int i_2 = 0;
- float2 uv = float2(0.0f, 0.0f);
- float3 color = float3(0.0f, 0.0f, 0.0f);
- x_GLF_FragCoord = ((x_GLF_pos + float4(1.0f, 1.0f, 0.0f, 0.0f)) * float4(128.0f, 128.0f, 1.0f, 1.0f));
- i_2 = 0;
- {
- [loop] for(; (i_2 < 10); i_2 = (i_2 + 1)) {
- obj.numbers[i_2] = (10 - i_2);
- const int x_112 = i_2;
- const int x_115 = obj.numbers[i_2];
- const int x_118 = obj.numbers[i_2];
- obj.numbers[x_112] = (x_115 * x_118);
- }
- }
- x_91 = 0;
- x_92 = 9;
- x_93 = -1;
- const int x_124 = (x_93 + 1);
- x_93 = x_124;
- x_94[x_124] = x_91;
- const int x_128 = (x_93 + 1);
- x_93 = x_128;
- x_94[x_128] = x_92;
- [loop] while (true) {
- if ((x_93 >= 0)) {
- } else {
- break;
- }
- const int x_138 = x_93;
- x_93 = (x_138 - 1);
- const int x_141 = x_94[x_138];
- x_92 = x_141;
- const int x_142 = x_93;
- x_93 = (x_142 - 1);
- const int x_145 = x_94[x_142];
- x_91 = x_145;
- x_96 = x_91;
- x_97 = x_92;
- const int x_148 = performPartition_i1_i1_(x_96, x_97);
- x_95 = x_148;
- if (((x_95 - 1) > x_91)) {
- const int x_156 = (x_93 + 1);
- x_93 = x_156;
- x_94[x_156] = x_91;
- const int x_160 = (x_93 + 1);
- x_93 = x_160;
- x_94[x_160] = (x_95 - 1);
- }
- if (((x_95 + 1) < x_92)) {
- const int x_171 = (x_93 + 1);
- x_93 = x_171;
- x_94[x_171] = (x_95 + 1);
- const int x_176 = (x_93 + 1);
- x_93 = x_176;
- x_94[x_176] = x_92;
- }
- }
- const float4 x_179 = x_GLF_FragCoord;
- const float2 x_182 = asfloat(x_34[0].xy);
- uv = (float2(x_179.x, x_179.y) / x_182);
- color = float3(1.0f, 2.0f, 3.0f);
- const int x_185 = obj.numbers[0];
- const float x_188 = color.x;
- color.x = (x_188 + float(x_185));
- const float x_192 = uv.x;
- if ((x_192 > 0.25f)) {
- const int x_197 = obj.numbers[1];
- const float x_200 = color.x;
- color.x = (x_200 + float(x_197));
- }
- const float x_204 = uv.x;
- if ((x_204 > 0.5f)) {
- const int x_209 = obj.numbers[2];
- const float x_212 = color.y;
- color.y = (x_212 + float(x_209));
- }
- const float x_216 = uv.x;
- if ((x_216 > 0.75f)) {
- const int x_221 = obj.numbers[3];
- const float x_224 = color.z;
- color.z = (x_224 + float(x_221));
- }
- const int x_228 = obj.numbers[4];
- const float x_231 = color.y;
- color.y = (x_231 + float(x_228));
- const float x_235 = uv.y;
- if ((x_235 > 0.25f)) {
- const int x_240 = obj.numbers[5];
- const float x_243 = color.x;
- color.x = (x_243 + float(x_240));
- }
- const float x_247 = uv.y;
- if ((x_247 > 0.5f)) {
- const int x_252 = obj.numbers[6];
- const float x_255 = color.y;
- color.y = (x_255 + float(x_252));
- }
- const float x_259 = uv.y;
- if ((x_259 > 0.75f)) {
- const int x_264 = obj.numbers[7];
- const float x_267 = color.z;
- color.z = (x_267 + float(x_264));
- }
- const int x_271 = obj.numbers[8];
- const float x_274 = color.z;
- color.z = (x_274 + float(x_271));
- const float x_278 = uv.x;
- const float x_280 = uv.y;
- if ((abs((x_278 - x_280)) < 0.25f)) {
- const int x_287 = obj.numbers[9];
- const float x_290 = color.x;
- color.x = (x_290 + float(x_287));
- }
- const float3 x_294 = normalize(color);
- frag_color = float4(x_294.x, x_294.y, x_294.z, 1.0f);
- gl_Position = x_GLF_pos;
- return;
-}
-
-struct main_out {
- float4 frag_color_1;
- float4 gl_Position;
-};
-struct tint_symbol_1 {
- float4 x_GLF_pos_param : TEXCOORD0;
-};
-struct tint_symbol_2 {
- float4 frag_color_1 : TEXCOORD0;
- float4 gl_Position : SV_Position;
-};
-
-main_out main_inner(float4 x_GLF_pos_param) {
- x_GLF_pos = x_GLF_pos_param;
- main_1();
- const main_out tint_symbol_4 = {frag_color, gl_Position};
- return tint_symbol_4;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
- const main_out inner_result = main_inner(tint_symbol.x_GLF_pos_param);
- tint_symbol_2 wrapper_result = (tint_symbol_2)0;
- wrapper_result.frag_color_1 = inner_result.frag_color_1;
- wrapper_result.gl_Position = inner_result.gl_Position;
- return wrapper_result;
-}
-
-void swap_i1_i1_(inout int i, inout int j) {
- int temp = 0;
- const int x_302 = i;
- const int x_304 = obj.numbers[x_302];
- temp = x_304;
- const int x_305 = i;
- const int x_306 = j;
- const int x_308 = obj.numbers[x_306];
- obj.numbers[x_305] = x_308;
- const int x_310 = j;
- obj.numbers[x_310] = temp;
- return;
-}
-
-void quicksort_() {
- int l_1 = 0;
- int h_1 = 0;
- int top = 0;
- int stack[10] = (int[10])0;
- int p = 0;
- int param_4 = 0;
- int param_5 = 0;
- l_1 = 0;
- h_1 = 9;
- top = -1;
- const int x_377 = (top + 1);
- top = x_377;
- stack[x_377] = l_1;
- const int x_381 = (top + 1);
- top = x_381;
- stack[x_381] = h_1;
- [loop] while (true) {
- if ((top >= 0)) {
- } else {
- break;
- }
- const int x_391 = top;
- top = (x_391 - 1);
- const int x_394 = stack[x_391];
- h_1 = x_394;
- const int x_395 = top;
- top = (x_395 - 1);
- const int x_398 = stack[x_395];
- l_1 = x_398;
- param_4 = l_1;
- param_5 = h_1;
- const int x_401 = performPartition_i1_i1_(param_4, param_5);
- p = x_401;
- if (((p - 1) > l_1)) {
- const int x_409 = (top + 1);
- top = x_409;
- stack[x_409] = l_1;
- const int x_413 = (top + 1);
- top = x_413;
- stack[x_413] = (p - 1);
- }
- if (((p + 1) < h_1)) {
- const int x_424 = (top + 1);
- top = x_424;
- stack[x_424] = (p + 1);
- const int x_429 = (top + 1);
- top = x_429;
- stack[x_429] = h_1;
- }
- }
- return;
-}
-C:\src\tint\test\Shader@0x000001381E0F76E0(85,7-22): warning X3550: array reference cannot be used as an l-value; not natively addressable, forcing loop to unroll
-C:\src\tint\test\Shader@0x000001381E0F76E0(84,12-45): error X3531: can't unroll loops marked with loop attribute
-
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-quicksort-max-value-as-index/2-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/stable-quicksort-max-value-as-index/2-opt.spvasm.expected.hlsl
deleted file mode 100644
index 8860431..0000000
--- a/test/vk-gl-cts/graphicsfuzz/stable-quicksort-max-value-as-index/2-opt.spvasm.expected.hlsl
+++ /dev/null
@@ -1,236 +0,0 @@
-SKIP: FAILED
-
-struct QuicksortObject {
- int numbers[10];
-};
-
-static QuicksortObject obj = (QuicksortObject)0;
-static float4 x_GLF_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-static float4 x_GLF_pos = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_34 : register(b1, space0) {
- uint4 x_34[1];
-};
-cbuffer cbuffer_x_37 : register(b0, space0) {
- uint4 x_37[1];
-};
-static float4 frag_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-static float4 gl_Position = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void swap_i1_i1_(inout int i, inout int j) {
- int temp = 0;
- const int x_257 = i;
- const int x_259 = obj.numbers[x_257];
- temp = x_259;
- const int x_260 = i;
- const int x_261 = j;
- const int x_263 = obj.numbers[x_261];
- obj.numbers[x_260] = x_263;
- const int x_265 = j;
- obj.numbers[x_265] = temp;
- return;
-}
-
-int performPartition_i1_i1_(inout int l, inout int h) {
- int pivot = 0;
- int i_1 = 0;
- int j_1 = 0;
- int param = 0;
- int param_1 = 0;
- int param_2 = 0;
- int param_3 = 0;
- const int x_269 = h;
- const int x_271 = obj.numbers[x_269];
- pivot = x_271;
- const int x_272 = l;
- i_1 = (x_272 - 1);
- const int x_274 = l;
- j_1 = x_274;
- [loop] while (true) {
- const int x_279 = j_1;
- const int x_280 = h;
- if ((x_279 <= (x_280 - 1))) {
- } else {
- break;
- }
- const int x_286 = obj.numbers[j_1];
- if ((x_286 <= pivot)) {
- i_1 = (i_1 + 1);
- param = i_1;
- param_1 = j_1;
- swap_i1_i1_(param, param_1);
- }
- {
- j_1 = (j_1 + 1);
- }
- }
- param_2 = (i_1 + 1);
- const int x_300 = h;
- param_3 = x_300;
- swap_i1_i1_(param_2, param_3);
- return (i_1 + 1);
-}
-
-void quicksort_() {
- int l_1 = 0;
- int h_1 = 0;
- int top = 0;
- int stack[10] = (int[10])0;
- int p = 0;
- int param_4 = 0;
- int param_5 = 0;
- l_1 = 0;
- h_1 = 9;
- top = -1;
- const int x_306 = (top + 1);
- top = x_306;
- stack[x_306] = l_1;
- const int x_310 = (top + 1);
- top = x_310;
- stack[x_310] = h_1;
- [loop] while (true) {
- if ((top >= 0)) {
- } else {
- break;
- }
- const int x_320 = top;
- top = (x_320 - 1);
- const int x_323 = stack[x_320];
- h_1 = x_323;
- const int x_324 = top;
- top = (x_324 - 1);
- const int x_327 = stack[x_324];
- l_1 = x_327;
- param_4 = l_1;
- param_5 = h_1;
- const int x_330 = performPartition_i1_i1_(param_4, param_5);
- p = x_330;
- if (((p - 1) > l_1)) {
- const int x_338 = (top + 1);
- top = x_338;
- stack[x_338] = l_1;
- const int x_342 = (top + 1);
- top = x_342;
- stack[x_342] = (p - 1);
- }
- if (((p + 1) < h_1)) {
- const int x_353 = (top + 1);
- top = x_353;
- stack[x_353] = (p + 1);
- const int x_358 = (top + 1);
- top = x_358;
- stack[x_358] = h_1;
- }
- }
- return;
-}
-
-void main_1() {
- int i_2 = 0;
- float2 uv = float2(0.0f, 0.0f);
- float3 color = float3(0.0f, 0.0f, 0.0f);
- x_GLF_FragCoord = ((x_GLF_pos + float4(1.0f, 1.0f, 0.0f, 0.0f)) * float4(128.0f, 128.0f, 1.0f, 1.0f));
- i_2 = 0;
- {
- [loop] for(; (i_2 < 10); i_2 = (i_2 + 1)) {
- obj.numbers[i_2] = (10 - i_2);
- const int x_108 = i_2;
- const int x_111 = obj.numbers[i_2];
- const int x_114 = obj.numbers[i_2];
- obj.numbers[x_108] = (x_111 * x_114);
- }
- }
- quicksort_();
- const float4 x_120 = x_GLF_FragCoord;
- const float2 x_123 = asfloat(x_34[0].xy);
- uv = (float2(x_120.x, x_120.y) / x_123);
- color = float3(1.0f, 2.0f, 3.0f);
- const int x_126 = obj.numbers[0];
- const float x_129 = color.x;
- color.x = (x_129 + float(x_126));
- const float x_133 = uv.x;
- if ((x_133 > 0.25f)) {
- const int x_138 = obj.numbers[1];
- const float x_141 = color.x;
- color.x = (x_141 + float(x_138));
- }
- const float x_145 = uv.x;
- if ((x_145 > 0.5f)) {
- const float x_150 = asfloat(x_37[0].y);
- const int x_155 = obj.numbers[max((2 * int(x_150)), 2)];
- const float x_158 = asfloat(x_37[0].y);
- const int x_163 = obj.numbers[max((2 * int(x_158)), 2)];
- const float x_167 = color.y;
- color.y = (x_167 + max(float(x_155), float(x_163)));
- }
- const float x_171 = uv.x;
- if ((x_171 > 0.75f)) {
- const int x_176 = obj.numbers[3];
- const float x_179 = color.z;
- color.z = (x_179 + float(x_176));
- }
- const int x_183 = obj.numbers[4];
- const float x_186 = color.y;
- color.y = (x_186 + float(x_183));
- const float x_190 = uv.y;
- if ((x_190 > 0.25f)) {
- const int x_195 = obj.numbers[5];
- const float x_198 = color.x;
- color.x = (x_198 + float(x_195));
- }
- const float x_202 = uv.y;
- if ((x_202 > 0.5f)) {
- const int x_207 = obj.numbers[6];
- const float x_210 = color.y;
- color.y = (x_210 + float(x_207));
- }
- const float x_214 = uv.y;
- if ((x_214 > 0.75f)) {
- const int x_219 = obj.numbers[7];
- const float x_222 = color.z;
- color.z = (x_222 + float(x_219));
- }
- const int x_226 = obj.numbers[8];
- const float x_229 = color.z;
- color.z = (x_229 + float(x_226));
- const float x_233 = uv.x;
- const float x_235 = uv.y;
- if ((abs((x_233 - x_235)) < 0.25f)) {
- const int x_242 = obj.numbers[9];
- const float x_245 = color.x;
- color.x = (x_245 + float(x_242));
- }
- const float3 x_249 = normalize(color);
- frag_color = float4(x_249.x, x_249.y, x_249.z, 1.0f);
- gl_Position = x_GLF_pos;
- return;
-}
-
-struct main_out {
- float4 frag_color_1;
- float4 gl_Position;
-};
-struct tint_symbol_1 {
- float4 x_GLF_pos_param : TEXCOORD0;
-};
-struct tint_symbol_2 {
- float4 frag_color_1 : TEXCOORD0;
- float4 gl_Position : SV_Position;
-};
-
-main_out main_inner(float4 x_GLF_pos_param) {
- x_GLF_pos = x_GLF_pos_param;
- main_1();
- const main_out tint_symbol_5 = {frag_color, gl_Position};
- return tint_symbol_5;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
- const main_out inner_result = main_inner(tint_symbol.x_GLF_pos_param);
- tint_symbol_2 wrapper_result = (tint_symbol_2)0;
- wrapper_result.frag_color_1 = inner_result.frag_color_1;
- wrapper_result.gl_Position = inner_result.gl_Position;
- return wrapper_result;
-}
-C:\src\tint\test\Shader@0x0000015776479900(133,7-22): warning X3550: array reference cannot be used as an l-value; not natively addressable, forcing loop to unroll
-C:\src\tint\test\Shader@0x0000015776479900(132,12-45): error X3531: can't unroll loops marked with loop attribute
-
diff --git a/test/vk-gl-cts/graphicsfuzz/stable-quicksort-max-value-as-index/2-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/stable-quicksort-max-value-as-index/2-opt.wgsl.expected.hlsl
deleted file mode 100644
index dc4f441..0000000
--- a/test/vk-gl-cts/graphicsfuzz/stable-quicksort-max-value-as-index/2-opt.wgsl.expected.hlsl
+++ /dev/null
@@ -1,236 +0,0 @@
-SKIP: FAILED
-
-struct QuicksortObject {
- int numbers[10];
-};
-
-static QuicksortObject obj = (QuicksortObject)0;
-static float4 x_GLF_FragCoord = float4(0.0f, 0.0f, 0.0f, 0.0f);
-static float4 x_GLF_pos = float4(0.0f, 0.0f, 0.0f, 0.0f);
-cbuffer cbuffer_x_34 : register(b1, space0) {
- uint4 x_34[1];
-};
-cbuffer cbuffer_x_37 : register(b0, space0) {
- uint4 x_37[1];
-};
-static float4 frag_color = float4(0.0f, 0.0f, 0.0f, 0.0f);
-static float4 gl_Position = float4(0.0f, 0.0f, 0.0f, 0.0f);
-
-void swap_i1_i1_(inout int i, inout int j) {
- int temp = 0;
- const int x_257 = i;
- const int x_259 = obj.numbers[x_257];
- temp = x_259;
- const int x_260 = i;
- const int x_261 = j;
- const int x_263 = obj.numbers[x_261];
- obj.numbers[x_260] = x_263;
- const int x_265 = j;
- obj.numbers[x_265] = temp;
- return;
-}
-
-int performPartition_i1_i1_(inout int l, inout int h) {
- int pivot = 0;
- int i_1 = 0;
- int j_1 = 0;
- int param = 0;
- int param_1 = 0;
- int param_2 = 0;
- int param_3 = 0;
- const int x_269 = h;
- const int x_271 = obj.numbers[x_269];
- pivot = x_271;
- const int x_272 = l;
- i_1 = (x_272 - 1);
- const int x_274 = l;
- j_1 = x_274;
- [loop] while (true) {
- const int x_279 = j_1;
- const int x_280 = h;
- if ((x_279 <= (x_280 - 1))) {
- } else {
- break;
- }
- const int x_286 = obj.numbers[j_1];
- if ((x_286 <= pivot)) {
- i_1 = (i_1 + 1);
- param = i_1;
- param_1 = j_1;
- swap_i1_i1_(param, param_1);
- }
- {
- j_1 = (j_1 + 1);
- }
- }
- param_2 = (i_1 + 1);
- const int x_300 = h;
- param_3 = x_300;
- swap_i1_i1_(param_2, param_3);
- return (i_1 + 1);
-}
-
-void quicksort_() {
- int l_1 = 0;
- int h_1 = 0;
- int top = 0;
- int stack[10] = (int[10])0;
- int p = 0;
- int param_4 = 0;
- int param_5 = 0;
- l_1 = 0;
- h_1 = 9;
- top = -1;
- const int x_306 = (top + 1);
- top = x_306;
- stack[x_306] = l_1;
- const int x_310 = (top + 1);
- top = x_310;
- stack[x_310] = h_1;
- [loop] while (true) {
- if ((top >= 0)) {
- } else {
- break;
- }
- const int x_320 = top;
- top = (x_320 - 1);
- const int x_323 = stack[x_320];
- h_1 = x_323;
- const int x_324 = top;
- top = (x_324 - 1);
- const int x_327 = stack[x_324];
- l_1 = x_327;
- param_4 = l_1;
- param_5 = h_1;
- const int x_330 = performPartition_i1_i1_(param_4, param_5);
- p = x_330;
- if (((p - 1) > l_1)) {
- const int x_338 = (top + 1);
- top = x_338;
- stack[x_338] = l_1;
- const int x_342 = (top + 1);
- top = x_342;
- stack[x_342] = (p - 1);
- }
- if (((p + 1) < h_1)) {
- const int x_353 = (top + 1);
- top = x_353;
- stack[x_353] = (p + 1);
- const int x_358 = (top + 1);
- top = x_358;
- stack[x_358] = h_1;
- }
- }
- return;
-}
-
-void main_1() {
- int i_2 = 0;
- float2 uv = float2(0.0f, 0.0f);
- float3 color = float3(0.0f, 0.0f, 0.0f);
- x_GLF_FragCoord = ((x_GLF_pos + float4(1.0f, 1.0f, 0.0f, 0.0f)) * float4(128.0f, 128.0f, 1.0f, 1.0f));
- i_2 = 0;
- {
- [loop] for(; (i_2 < 10); i_2 = (i_2 + 1)) {
- obj.numbers[i_2] = (10 - i_2);
- const int x_108 = i_2;
- const int x_111 = obj.numbers[i_2];
- const int x_114 = obj.numbers[i_2];
- obj.numbers[x_108] = (x_111 * x_114);
- }
- }
- quicksort_();
- const float4 x_120 = x_GLF_FragCoord;
- const float2 x_123 = asfloat(x_34[0].xy);
- uv = (float2(x_120.x, x_120.y) / x_123);
- color = float3(1.0f, 2.0f, 3.0f);
- const int x_126 = obj.numbers[0];
- const float x_129 = color.x;
- color.x = (x_129 + float(x_126));
- const float x_133 = uv.x;
- if ((x_133 > 0.25f)) {
- const int x_138 = obj.numbers[1];
- const float x_141 = color.x;
- color.x = (x_141 + float(x_138));
- }
- const float x_145 = uv.x;
- if ((x_145 > 0.5f)) {
- const float x_150 = asfloat(x_37[0].y);
- const int x_155 = obj.numbers[max((2 * int(x_150)), 2)];
- const float x_158 = asfloat(x_37[0].y);
- const int x_163 = obj.numbers[max((2 * int(x_158)), 2)];
- const float x_167 = color.y;
- color.y = (x_167 + max(float(x_155), float(x_163)));
- }
- const float x_171 = uv.x;
- if ((x_171 > 0.75f)) {
- const int x_176 = obj.numbers[3];
- const float x_179 = color.z;
- color.z = (x_179 + float(x_176));
- }
- const int x_183 = obj.numbers[4];
- const float x_186 = color.y;
- color.y = (x_186 + float(x_183));
- const float x_190 = uv.y;
- if ((x_190 > 0.25f)) {
- const int x_195 = obj.numbers[5];
- const float x_198 = color.x;
- color.x = (x_198 + float(x_195));
- }
- const float x_202 = uv.y;
- if ((x_202 > 0.5f)) {
- const int x_207 = obj.numbers[6];
- const float x_210 = color.y;
- color.y = (x_210 + float(x_207));
- }
- const float x_214 = uv.y;
- if ((x_214 > 0.75f)) {
- const int x_219 = obj.numbers[7];
- const float x_222 = color.z;
- color.z = (x_222 + float(x_219));
- }
- const int x_226 = obj.numbers[8];
- const float x_229 = color.z;
- color.z = (x_229 + float(x_226));
- const float x_233 = uv.x;
- const float x_235 = uv.y;
- if ((abs((x_233 - x_235)) < 0.25f)) {
- const int x_242 = obj.numbers[9];
- const float x_245 = color.x;
- color.x = (x_245 + float(x_242));
- }
- const float3 x_249 = normalize(color);
- frag_color = float4(x_249.x, x_249.y, x_249.z, 1.0f);
- gl_Position = x_GLF_pos;
- return;
-}
-
-struct main_out {
- float4 frag_color_1;
- float4 gl_Position;
-};
-struct tint_symbol_1 {
- float4 x_GLF_pos_param : TEXCOORD0;
-};
-struct tint_symbol_2 {
- float4 frag_color_1 : TEXCOORD0;
- float4 gl_Position : SV_Position;
-};
-
-main_out main_inner(float4 x_GLF_pos_param) {
- x_GLF_pos = x_GLF_pos_param;
- main_1();
- const main_out tint_symbol_5 = {frag_color, gl_Position};
- return tint_symbol_5;
-}
-
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
- const main_out inner_result = main_inner(tint_symbol.x_GLF_pos_param);
- tint_symbol_2 wrapper_result = (tint_symbol_2)0;
- wrapper_result.frag_color_1 = inner_result.frag_color_1;
- wrapper_result.gl_Position = inner_result.gl_Position;
- return wrapper_result;
-}
-C:\src\tint\test\Shader@0x00000203506D3380(133,7-22): warning X3550: array reference cannot be used as an l-value; not natively addressable, forcing loop to unroll
-C:\src\tint\test\Shader@0x00000203506D3380(132,12-45): error X3531: can't unroll loops marked with loop attribute
-
diff --git a/test/vk-gl-cts/graphicsfuzz/undefined-assign-in-infinite-loop/0.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/undefined-assign-in-infinite-loop/0.spvasm.expected.hlsl
index b7efb3d..e2ee645 100755
--- a/test/vk-gl-cts/graphicsfuzz/undefined-assign-in-infinite-loop/0.spvasm.expected.hlsl
+++ b/test/vk-gl-cts/graphicsfuzz/undefined-assign-in-infinite-loop/0.spvasm.expected.hlsl
Binary files differ
diff --git a/test/vk-gl-cts/graphicsfuzz/undefined-assign-in-infinite-loop/0.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/undefined-assign-in-infinite-loop/0.wgsl.expected.hlsl
index 318f425..89d932e 100755
--- a/test/vk-gl-cts/graphicsfuzz/undefined-assign-in-infinite-loop/0.wgsl.expected.hlsl
+++ b/test/vk-gl-cts/graphicsfuzz/undefined-assign-in-infinite-loop/0.wgsl.expected.hlsl
Binary files differ
diff --git a/test/vk-gl-cts/graphicsfuzz/unreachable-loops/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/unreachable-loops/0-opt.spvasm.expected.hlsl
index 6947f93..0bd5e2f 100755
--- a/test/vk-gl-cts/graphicsfuzz/unreachable-loops/0-opt.spvasm.expected.hlsl
+++ b/test/vk-gl-cts/graphicsfuzz/unreachable-loops/0-opt.spvasm.expected.hlsl
Binary files differ
diff --git a/test/vk-gl-cts/graphicsfuzz/unreachable-loops/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/unreachable-loops/0-opt.wgsl.expected.hlsl
index 6c196a4..dea1e99 100755
--- a/test/vk-gl-cts/graphicsfuzz/unreachable-loops/0-opt.wgsl.expected.hlsl
+++ b/test/vk-gl-cts/graphicsfuzz/unreachable-loops/0-opt.wgsl.expected.hlsl
Binary files differ
diff --git a/test/vk-gl-cts/graphicsfuzz/unreachable-return-in-loop/0.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/unreachable-return-in-loop/0.spvasm.expected.hlsl
index 7aaf54b..88749bc 100755
--- a/test/vk-gl-cts/graphicsfuzz/unreachable-return-in-loop/0.spvasm.expected.hlsl
+++ b/test/vk-gl-cts/graphicsfuzz/unreachable-return-in-loop/0.spvasm.expected.hlsl
@@ -54,3 +54,5 @@
wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
return wrapper_result;
}
+Internal compiler error: access violation. Attempted to read from address 0x0000000000000048
+
diff --git a/test/vk-gl-cts/graphicsfuzz/unreachable-return-in-loop/0.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/unreachable-return-in-loop/0.wgsl.expected.hlsl
index 7aaf54b..88749bc 100755
--- a/test/vk-gl-cts/graphicsfuzz/unreachable-return-in-loop/0.wgsl.expected.hlsl
+++ b/test/vk-gl-cts/graphicsfuzz/unreachable-return-in-loop/0.wgsl.expected.hlsl
@@ -54,3 +54,5 @@
wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
return wrapper_result;
}
+Internal compiler error: access violation. Attempted to read from address 0x0000000000000048
+
diff --git a/test/vk-gl-cts/graphicsfuzz/write-before-break/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/write-before-break/0-opt.spvasm.expected.hlsl
index 4cdacd9..8d28303 100755
--- a/test/vk-gl-cts/graphicsfuzz/write-before-break/0-opt.spvasm.expected.hlsl
+++ b/test/vk-gl-cts/graphicsfuzz/write-before-break/0-opt.spvasm.expected.hlsl
Binary files differ
diff --git a/test/vk-gl-cts/graphicsfuzz/write-before-break/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/write-before-break/0-opt.wgsl.expected.hlsl
index da48cd9..4498f29 100755
--- a/test/vk-gl-cts/graphicsfuzz/write-before-break/0-opt.wgsl.expected.hlsl
+++ b/test/vk-gl-cts/graphicsfuzz/write-before-break/0-opt.wgsl.expected.hlsl
Binary files differ
diff --git a/test/vk-gl-cts/graphicsfuzz/write-red-after-search/0-opt.spvasm.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/write-red-after-search/0-opt.spvasm.expected.hlsl
index 2836952..029e057 100644
--- a/test/vk-gl-cts/graphicsfuzz/write-red-after-search/0-opt.spvasm.expected.hlsl
+++ b/test/vk-gl-cts/graphicsfuzz/write-red-after-search/0-opt.spvasm.expected.hlsl
@@ -268,8 +268,19 @@
const int x_145 = GLF_live4index;
const int x_146 = GLF_live4index;
const float x_269 = GLF_live4obj.even_numbers[1];
- GLF_live4obj.even_numbers[(((x_144 >= 0) & (x_145 < 10)) ? x_146 : 0)] = x_269;
- GLF_live4obj.even_numbers[(((GLF_live4i >= 0) & (GLF_live4i < 10)) ? GLF_live4i : 0)] = 1.0f;
+ {
+ float tint_symbol_1[10] = GLF_live4obj.even_numbers;
+ tint_symbol_1[(((x_144 >= 0) & (x_145 < 10)) ? x_146 : 0)] = x_269;
+ GLF_live4obj.even_numbers = tint_symbol_1;
+ }
+ const int x_147 = GLF_live4i;
+ const int x_148 = GLF_live4i;
+ const int x_149 = GLF_live4i;
+ {
+ float tint_symbol_3[10] = GLF_live4obj.even_numbers;
+ tint_symbol_3[(((x_147 >= 0) & (x_148 < 10)) ? x_149 : 0)] = 1.0f;
+ GLF_live4obj.even_numbers = tint_symbol_3;
+ }
}
}
param_24 = treeIndex_1;
@@ -337,27 +348,27 @@
struct main_out {
float4 x_GLF_color_1;
};
-struct tint_symbol_1 {
+struct tint_symbol_5 {
float4 gl_FragCoord_param : SV_Position;
};
-struct tint_symbol_2 {
+struct tint_symbol_6 {
float4 x_GLF_color_1 : SV_Target0;
};
main_out main_inner(float4 gl_FragCoord_param) {
gl_FragCoord = gl_FragCoord_param;
main_1();
- const main_out tint_symbol_4 = {x_GLF_color};
- return tint_symbol_4;
+ const main_out tint_symbol_8 = {x_GLF_color};
+ return tint_symbol_8;
}
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
- const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
- tint_symbol_2 wrapper_result = (tint_symbol_2)0;
+tint_symbol_6 main(tint_symbol_5 tint_symbol_4) {
+ const main_out inner_result = main_inner(tint_symbol_4.gl_FragCoord_param);
+ tint_symbol_6 wrapper_result = (tint_symbol_6)0;
wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
return wrapper_result;
}
-C:\src\tint\test\Shader@0x0000028F1D72B060(35,10-21): warning X3557: loop only executes for 0 iteration(s), consider removing [loop]
-C:\src\tint\test\Shader@0x0000028F1D72B060(270,7-91): warning X3550: array reference cannot be used as an l-value; not natively addressable, forcing loop to unroll
-C:\src\tint\test\Shader@0x0000028F1D72B060(259,12-53): error X3531: can't unroll loops marked with loop attribute
+C:\src\tint\test\Shader@0x000001F7677BB400(35,10-21): warning X3557: loop only executes for 0 iteration(s), consider removing [loop]
+C:\src\tint\test\Shader@0x000001F7677BB400(145,3): warning X4000: use of potentially uninitialized variable (makeFrame_f1_)
+internal error: compilation aborted unexpectedly
diff --git a/test/vk-gl-cts/graphicsfuzz/write-red-after-search/0-opt.wgsl.expected.hlsl b/test/vk-gl-cts/graphicsfuzz/write-red-after-search/0-opt.wgsl.expected.hlsl
index dfa33a6..4c1b604 100644
--- a/test/vk-gl-cts/graphicsfuzz/write-red-after-search/0-opt.wgsl.expected.hlsl
+++ b/test/vk-gl-cts/graphicsfuzz/write-red-after-search/0-opt.wgsl.expected.hlsl
@@ -272,16 +272,27 @@
const int x_145 = GLF_live4index;
const int x_146 = GLF_live4index;
const float x_269 = GLF_live4obj.even_numbers[1];
- bool tint_tmp_1 = (x_144 >= 0);
- if (tint_tmp_1) {
- tint_tmp_1 = (x_145 < 10);
+ {
+ float tint_symbol_1[10] = GLF_live4obj.even_numbers;
+ bool tint_tmp_1 = (x_144 >= 0);
+ if (tint_tmp_1) {
+ tint_tmp_1 = (x_145 < 10);
+ }
+ tint_symbol_1[((tint_tmp_1) ? x_146 : 0)] = x_269;
+ GLF_live4obj.even_numbers = tint_symbol_1;
}
- GLF_live4obj.even_numbers[((tint_tmp_1) ? x_146 : 0)] = x_269;
- bool tint_tmp_2 = (GLF_live4i >= 0);
- if (tint_tmp_2) {
- tint_tmp_2 = (GLF_live4i < 10);
+ const int x_147 = GLF_live4i;
+ const int x_148 = GLF_live4i;
+ const int x_149 = GLF_live4i;
+ {
+ float tint_symbol_3[10] = GLF_live4obj.even_numbers;
+ bool tint_tmp_2 = (x_147 >= 0);
+ if (tint_tmp_2) {
+ tint_tmp_2 = (x_148 < 10);
+ }
+ tint_symbol_3[((tint_tmp_2) ? x_149 : 0)] = 1.0f;
+ GLF_live4obj.even_numbers = tint_symbol_3;
}
- GLF_live4obj.even_numbers[((tint_tmp_2) ? GLF_live4i : 0)] = 1.0f;
}
}
param_24 = treeIndex_1;
@@ -349,27 +360,27 @@
struct main_out {
float4 x_GLF_color_1;
};
-struct tint_symbol_1 {
+struct tint_symbol_5 {
float4 gl_FragCoord_param : SV_Position;
};
-struct tint_symbol_2 {
+struct tint_symbol_6 {
float4 x_GLF_color_1 : SV_Target0;
};
main_out main_inner(float4 gl_FragCoord_param) {
gl_FragCoord = gl_FragCoord_param;
main_1();
- const main_out tint_symbol_4 = {x_GLF_color};
- return tint_symbol_4;
+ const main_out tint_symbol_8 = {x_GLF_color};
+ return tint_symbol_8;
}
-tint_symbol_2 main(tint_symbol_1 tint_symbol) {
- const main_out inner_result = main_inner(tint_symbol.gl_FragCoord_param);
- tint_symbol_2 wrapper_result = (tint_symbol_2)0;
+tint_symbol_6 main(tint_symbol_5 tint_symbol_4) {
+ const main_out inner_result = main_inner(tint_symbol_4.gl_FragCoord_param);
+ tint_symbol_6 wrapper_result = (tint_symbol_6)0;
wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
return wrapper_result;
}
-C:\src\tint\test\Shader@0x000001C987F87080(35,10-21): warning X3557: loop only executes for 0 iteration(s), consider removing [loop]
-C:\src\tint\test\Shader@0x000001C987F87080(282,7-64): warning X3550: array reference cannot be used as an l-value; not natively addressable, forcing loop to unroll
-C:\src\tint\test\Shader@0x000001C987F87080(263,12-53): error X3531: can't unroll loops marked with loop attribute
+C:\src\tint\test\Shader@0x000001C9889DF080(35,10-21): warning X3557: loop only executes for 0 iteration(s), consider removing [loop]
+C:\src\tint\test\Shader@0x000001C9889DF080(149,3): warning X4000: use of potentially uninitialized variable (makeFrame_f1_)
+internal error: compilation aborted unexpectedly