spirv-reader: switch to HLSL-style pipeline IO
- When storing to sample_mask output, write to the 0th element
- Only make a return struct if it has members
- Adjust type signedness coercion when loading special builtins.
- Adapt tests
- Update expectations for end-to-end tests
- Handle sample_mask with stride
Input variables normally don't have layout. But they can have it
up through SPIR-V 1.4.
Handle this case in the SPIR-V reader, by seeing through the
intermediate alias type created for the strided array type.
Bug: tint:508
Change-Id: I0f19dc1305d3f250dbbc0698a602288c34245274
Reviewed-on: https://dawn-review.googlesource.com/c/tint/+/54743
Auto-Submit: David Neto <dneto@google.com>
Commit-Queue: Ben Clayton <bclayton@google.com>
Reviewed-by: James Price <jrprice@google.com>
Reviewed-by: Ben Clayton <bclayton@google.com>
Kokoro: Kokoro <noreply+kokoro@google.com>
diff --git a/src/reader/spirv/function.cc b/src/reader/spirv/function.cc
index 2886d25..c3c2818 100644
--- a/src/reader/spirv/function.cc
+++ b/src/reader/spirv/function.cc
@@ -961,7 +961,7 @@
auto* forced_store_type = store_type;
ast::DecorationList param_decos;
if (!parser_impl_.ConvertDecorationsForVariable(var_id, &forced_store_type,
- ¶m_decos)) {
+ ¶m_decos, true)) {
// This occurs, and is not an error, for the PointSize builtin.
if (!success()) {
// But exit early if an error was logged.
@@ -986,15 +986,23 @@
// variable.
ast::Expression* param_value =
create<ast::IdentifierExpression>(source, param_sym);
+ ast::Expression* store_dest =
+ create<ast::IdentifierExpression>(source, var_sym);
if (HasBuiltinSampleMask(param_decos)) {
// In Vulkan SPIR-V, the sample mask is an array. In WGSL it's a scalar.
// Use the first element only.
- param_value = create<ast::ArrayAccessorExpression>(
- source, param_value, parser_impl_.MakeNullValue(ty_.I32()));
- if (store_type->As<Array>()->type->IsSignedScalarOrVector()) {
- // sample_mask is unsigned in WGSL. Bitcast it.
- param_value = create<ast::BitcastExpression>(
- source, ty_.I32()->Build(builder_), param_value);
+ store_dest = create<ast::ArrayAccessorExpression>(
+ source, store_dest, parser_impl_.MakeNullValue(ty_.I32()));
+ if (const auto* arr_ty = store_type->UnwrapAlias()->As<Array>()) {
+ if (arr_ty->type->IsSignedScalarOrVector()) {
+ // sample_mask is unsigned in WGSL. Bitcast it.
+ param_value = create<ast::BitcastExpression>(
+ source, ty_.I32()->Build(builder_), param_value);
+ }
+ } else {
+ // Vulkan SPIR-V requires this. Validation should have failed already.
+ return Fail()
+ << "expected SampleMask to be an array of integer scalars";
}
} else if (forced_store_type != store_type) {
// The parameter will have the WGSL type, but we need to add
@@ -1003,9 +1011,8 @@
source, store_type->Build(builder_), param_value);
}
- stmts.push_back(create<ast::AssignmentStatement>(
- source, create<ast::IdentifierExpression>(source, var_sym),
- param_value));
+ stmts.push_back(
+ create<ast::AssignmentStatement>(source, store_dest, param_value));
}
// Call the inner function. It has no parameters.
@@ -1053,7 +1060,7 @@
store_type = GetVariableStoreType(*var);
param_type = store_type;
if (!parser_impl_.ConvertDecorationsForVariable(var_id, ¶m_type,
- &out_decos)) {
+ &out_decos, true)) {
// This occurs, and is not an error, for the PointSize builtin.
if (!success()) {
// But exit early if an error was logged.
@@ -1084,10 +1091,16 @@
// Get the first element only.
return_member_value = create<ast::ArrayAccessorExpression>(
source, return_member_value, parser_impl_.MakeNullValue(ty_.I32()));
- if (store_type->As<Array>()->type->IsSignedScalarOrVector()) {
- // sample_mask is unsigned in WGSL. Bitcast it.
- return_member_value = create<ast::BitcastExpression>(
- source, param_type->Build(builder_), return_member_value);
+ if (const auto* arr_ty = store_type->UnwrapAlias()->As<Array>()) {
+ if (arr_ty->type->IsSignedScalarOrVector()) {
+ // sample_mask is unsigned in WGSL. Bitcast it.
+ return_member_value = create<ast::BitcastExpression>(
+ source, param_type->Build(builder_), return_member_value);
+ }
+ } else {
+ // Vulkan SPIR-V requires this. Validation should have failed already.
+ return Fail()
+ << "expected SampleMask to be an array of integer scalars";
}
} else {
// No other builtin outputs need signedness conversion.
@@ -1096,16 +1109,22 @@
return_exprs.push_back(return_member_value);
}
- // Create and register the result type.
- auto* str = create<ast::Struct>(Source{}, return_struct_sym, return_members,
- ast::DecorationList{});
- parser_impl_.AddTypeDecl(return_struct_sym, str);
- return_type = builder_.ty.Of(str);
+ if (return_members.empty()) {
+ // This can occur if only the PointSize member is accessed, because we
+ // never emit it.
+ return_type = ty_.Void()->Build(builder_);
+ } else {
+ // Create and register the result type.
+ auto* str = create<ast::Struct>(Source{}, return_struct_sym,
+ return_members, ast::DecorationList{});
+ parser_impl_.AddTypeDecl(return_struct_sym, str);
+ return_type = builder_.ty.Of(str);
- // Add the return-value statement.
- stmts.push_back(create<ast::ReturnStatement>(
- source, create<ast::TypeConstructorExpression>(
- source, return_type, std::move(return_exprs))));
+ // Add the return-value statement.
+ stmts.push_back(create<ast::ReturnStatement>(
+ source, create<ast::TypeConstructorExpression>(
+ source, return_type, std::move(return_exprs))));
+ }
}
auto* body = create<ast::BlockStatement>(source, stmts);
@@ -3320,6 +3339,8 @@
return false;
}
+ TypedExpression lhs;
+
// Handle exceptional cases
switch (GetSkipReason(ptr_id)) {
case SkipReason::kPointSizeBuiltinPointer:
@@ -3332,13 +3353,33 @@
<< inst.PrettyPrint();
case SkipReason::kSampleMaskOutBuiltinPointer:
- ptr_id = sample_mask_out_id;
- if (!rhs.type->Is<U32>()) {
- // WGSL requires sample_mask_out to be signed.
- rhs = TypedExpression{ty_.U32(),
- create<ast::TypeConstructorExpression>(
- Source{}, builder_.ty.u32(),
- ast::ExpressionList{rhs.expr})};
+ lhs = MakeExpression(sample_mask_out_id);
+ if (lhs.type->Is<Pointer>()) {
+ // LHS of an assignment must be a reference type.
+ // Convert the LHS to a reference by dereferencing it.
+ lhs = Dereference(lhs);
+ }
+ if (parser_impl_.UseHLSLStylePipelineIO()) {
+ // In the HLSL-style pipeline IO case, the private variable is an
+ // array whose element type is already of the same type as the value
+ // being stored into it. Form the reference into the first element.
+ lhs.expr = create<ast::ArrayAccessorExpression>(
+ Source{}, lhs.expr, parser_impl_.MakeNullValue(ty_.I32()));
+ if (auto* ref = lhs.type->As<Reference>()) {
+ lhs.type = ref->type;
+ }
+ if (auto* arr = lhs.type->As<Array>()) {
+ lhs.type = arr->type;
+ }
+ TINT_ASSERT(lhs.type);
+ } else {
+ if (!rhs.type->Is<U32>()) {
+ // WGSL requires sample_mask_out to be unsigned.
+ rhs = TypedExpression{ty_.U32(),
+ create<ast::TypeConstructorExpression>(
+ Source{}, builder_.ty.u32(),
+ ast::ExpressionList{rhs.expr})};
+ }
}
break;
default:
@@ -3346,7 +3387,9 @@
}
// Handle an ordinary store as an assignment.
- auto lhs = MakeExpression(ptr_id);
+ if (!lhs) {
+ lhs = MakeExpression(ptr_id);
+ }
if (!lhs) {
return false;
}
@@ -3367,6 +3410,7 @@
// So represent a load by a new const definition.
const auto ptr_id = inst.GetSingleWordInOperand(0);
const auto skip_reason = GetSkipReason(ptr_id);
+
switch (skip_reason) {
case SkipReason::kPointSizeBuiltinPointer:
GetDefInfo(inst.result_id())->skip =
@@ -3375,7 +3419,6 @@
case SkipReason::kSampleIdBuiltinPointer:
case SkipReason::kVertexIndexBuiltinPointer:
case SkipReason::kInstanceIndexBuiltinPointer: {
- // The SPIR-V variable is i32, but WGSL requires u32.
auto name = NameForSpecialInputBuiltin(skip_reason);
if (name.empty()) {
return Fail() << "internal error: unhandled special input builtin "
@@ -3384,30 +3427,30 @@
}
ast::Expression* id_expr = create<ast::IdentifierExpression>(
Source{}, builder_.Symbols().Register(name));
- auto expr = TypedExpression{
- ty_.I32(),
- create<ast::TypeConstructorExpression>(
- Source{}, builder_.ty.i32(), ast::ExpressionList{id_expr})};
+
+ auto* loaded_type = parser_impl_.ConvertType(inst.type_id());
+ auto expr = TypedExpression{loaded_type, id_expr};
return EmitConstDefinition(inst, expr);
}
case SkipReason::kSampleMaskInBuiltinPointer: {
auto name = namer_.Name(sample_mask_in_id);
ast::Expression* id_expr = create<ast::IdentifierExpression>(
Source{}, builder_.Symbols().Register(name));
- auto* load_result_type = parser_impl_.ConvertType(inst.type_id());
- ast::Expression* ast_expr = nullptr;
- if (load_result_type->Is<I32>()) {
- ast_expr = create<ast::TypeConstructorExpression>(
- Source{}, builder_.ty.i32(), ast::ExpressionList{id_expr});
- } else if (load_result_type->Is<U32>()) {
- ast_expr = id_expr;
- } else {
+ // SampleMask is an array in Vulkan SPIR-V. Always access the first
+ // element.
+ id_expr = create<ast::ArrayAccessorExpression>(
+ Source{}, id_expr, parser_impl_.MakeNullValue(ty_.I32()));
+
+ auto* loaded_type = parser_impl_.ConvertType(inst.type_id());
+
+ if (!loaded_type->IsIntegerScalar()) {
return Fail() << "loading the whole SampleMask input array is not "
"supported: "
<< inst.PrettyPrint();
}
- return EmitConstDefinition(
- inst, TypedExpression{load_result_type, ast_expr});
+
+ auto expr = TypedExpression{loaded_type, id_expr};
+ return EmitConstDefinition(inst, expr);
}
default:
break;
diff --git a/src/reader/spirv/function_call_test.cc b/src/reader/spirv/function_call_test.cc
index 143694f..33e77cd 100644
--- a/src/reader/spirv/function_call_test.cc
+++ b/src/reader/spirv/function_call_test.cc
@@ -58,7 +58,6 @@
Return{}
}
Function $2 -> __void
- StageDecoration{vertex}
()
{
Call[not set]{
@@ -68,6 +67,16 @@
}
Return{}
}
+ Function $3 -> __void
+ StageDecoration{vertex}
+ ()
+ {
+ Call[not set]{
+ Identifier[not set]{$2}
+ (
+ )
+ }
+ }
}
)";
EXPECT_EQ(expect, got);
@@ -224,7 +233,7 @@
ASSERT_TRUE(p->BuildAndParseInternalModule()) << p->error();
EXPECT_TRUE(p->error().empty());
const auto program_ast_str = p->program().to_str();
- EXPECT_THAT(program_ast_str, HasSubstr(R"(Module{
+ const std::string expected = R"(Module{
Function x_50 -> __u32
(
VariableConst{
@@ -251,8 +260,7 @@
}
}
}
- Function x_100 -> __void
- StageDecoration{vertex}
+ Function x_100_1 -> __void
()
{
VariableDeclStatement{
@@ -274,7 +282,19 @@
}
Return{}
}
-})")) << program_ast_str;
+ Function x_100 -> __void
+ StageDecoration{vertex}
+ ()
+ {
+ Call[not set]{
+ Identifier[not set]{x_100_1}
+ (
+ )
+ }
+ }
+}
+)";
+ EXPECT_EQ(program_ast_str, expected);
}
} // namespace
diff --git a/src/reader/spirv/function_memory_test.cc b/src/reader/spirv/function_memory_test.cc
index c032b75..1b30749 100644
--- a/src/reader/spirv/function_memory_test.cc
+++ b/src/reader/spirv/function_memory_test.cc
@@ -883,11 +883,20 @@
}
Return{}
}
+ Function main_1 -> __void
+ ()
+ {
+ Return{}
+ }
Function main -> __void
StageDecoration{vertex}
()
{
- Return{}
+ Call[not set]{
+ Identifier[not set]{main_1}
+ (
+ )
+ }
}
}
)";
diff --git a/src/reader/spirv/parser_impl.cc b/src/reader/spirv/parser_impl.cc
index 95e50ad..46ad25a 100644
--- a/src/reader/spirv/parser_impl.cc
+++ b/src/reader/spirv/parser_impl.cc
@@ -250,6 +250,7 @@
namer_(fail_stream_),
enum_converter_(fail_stream_),
tools_context_(kInputEnv) {
+ hlsl_style_pipeline_io_ = true;
// Create a message consumer to propagate error messages from SPIRV-Tools
// out as our own failures.
message_consumer_ = [this](spv_message_level_t level, const char* /*source*/,
@@ -1408,12 +1409,9 @@
sc = ast::StorageClass::kNone;
}
- // In almost all cases, copy the decorations from SPIR-V to the variable.
- // But avoid doing so when converting pipeline IO to private variables.
- if (sc != ast::StorageClass::kPrivate) {
- if (!ConvertDecorationsForVariable(id, &storage_type, &decorations)) {
- return nullptr;
- }
+ if (!ConvertDecorationsForVariable(id, &storage_type, &decorations,
+ sc != ast::StorageClass::kPrivate)) {
+ return nullptr;
}
std::string name = namer_.Name(id);
@@ -1427,10 +1425,10 @@
constructor, decorations);
}
-bool ParserImpl::ConvertDecorationsForVariable(
- uint32_t id,
- const Type** type,
- ast::DecorationList* decorations) {
+bool ParserImpl::ConvertDecorationsForVariable(uint32_t id,
+ const Type** store_type,
+ ast::DecorationList* decorations,
+ bool transfer_pipeline_io) {
for (auto& deco : GetDecorationsFor(id)) {
if (deco.empty()) {
return Fail() << "malformed decoration on ID " << id << ": it is empty";
@@ -1456,10 +1454,12 @@
// The SPIR-V variable may signed (because GLSL requires signed for
// some of these), but WGSL requires unsigned. Handle specially
// so we always perform the conversion at load and store.
- if (auto* forced_type = UnsignedTypeFor(*type)) {
+ special_builtins_[id] = spv_builtin;
+ if (auto* forced_type = UnsignedTypeFor(*store_type)) {
// Requires conversion and special handling in code generation.
- special_builtins_[id] = spv_builtin;
- *type = forced_type;
+ if (transfer_pipeline_io) {
+ *store_type = forced_type;
+ }
}
break;
case SpvBuiltInSampleMask: {
@@ -1473,7 +1473,9 @@
"SampleMask must be an array of 1 element.";
}
special_builtins_[id] = spv_builtin;
- *type = ty_.U32();
+ if (transfer_pipeline_io) {
+ *store_type = ty_.U32();
+ }
break;
}
default:
@@ -1484,16 +1486,20 @@
// A diagnostic has already been emitted.
return false;
}
- decorations->emplace_back(
- create<ast::BuiltinDecoration>(Source{}, ast_builtin));
+ if (transfer_pipeline_io) {
+ decorations->emplace_back(
+ create<ast::BuiltinDecoration>(Source{}, ast_builtin));
+ }
}
if (deco[0] == SpvDecorationLocation) {
if (deco.size() != 2) {
return Fail() << "malformed Location decoration on ID " << id
<< ": requires one literal operand";
}
- decorations->emplace_back(
- create<ast::LocationDecoration>(Source{}, deco[1]));
+ if (transfer_pipeline_io) {
+ decorations->emplace_back(
+ create<ast::LocationDecoration>(Source{}, deco[1]));
+ }
}
if (deco[0] == SpvDecorationDescriptorSet) {
if (deco.size() == 1) {
diff --git a/src/reader/spirv/parser_impl.h b/src/reader/spirv/parser_impl.h
index d303bc0..60e96cf 100644
--- a/src/reader/spirv/parser_impl.h
+++ b/src/reader/spirv/parser_impl.h
@@ -226,13 +226,16 @@
/// a diagnostic), or when the variable should not be emitted, e.g. for a
/// PointSize builtin.
/// @param id the ID of the SPIR-V variable
- /// @param type the WGSL store type for the variable, which should be
+ /// @param store_type the WGSL store type for the variable, which should be
/// prepopulatd
/// @param ast_decos the decoration list to populate
+ /// @param transfer_pipeline_io true if pipeline IO decorations (builtins,
+ /// or locations) will update the store type and the decorations list
/// @returns false when the variable should not be emitted as a variable
bool ConvertDecorationsForVariable(uint32_t id,
- const Type** type,
- ast::DecorationList* ast_decos);
+ const Type** store_type,
+ ast::DecorationList* ast_decos,
+ bool transfer_pipeline_io);
/// Converts a SPIR-V struct member decoration. If the decoration is
/// recognized but deliberately dropped, then returns nullptr without a
diff --git a/src/reader/spirv/parser_impl_barrier_test.cc b/src/reader/spirv/parser_impl_barrier_test.cc
index 08d1b34..0f82e00 100644
--- a/src/reader/spirv/parser_impl_barrier_test.cc
+++ b/src/reader/spirv/parser_impl_barrier_test.cc
@@ -48,22 +48,28 @@
TEST_F(SpvParserTest, WorkgroupBarrier) {
auto program = ParseAndBuild(R"(
+ OpName %helper "helper"
%void = OpTypeVoid
%1 = OpTypeFunction %void
%uint = OpTypeInt 32 0
%uint_2 = OpConstant %uint 2
%uint_264 = OpConstant %uint 264
- %main = OpFunction %void None %1
+ %helper = OpFunction %void None %1
%4 = OpLabel
OpControlBarrier %uint_2 %uint_2 %uint_264
OpReturn
OpFunctionEnd
+ %main = OpFunction %void None %1
+ %5 = OpLabel
+ OpReturn
+ OpFunctionEnd
)");
ASSERT_TRUE(program.IsValid()) << program.Diagnostics().str();
- auto* main = program.AST().Functions().Find(program.Symbols().Get("main"));
- ASSERT_NE(main, nullptr);
- ASSERT_GT(main->body()->size(), 0u);
- auto* call = main->body()->get(0)->As<ast::CallStatement>();
+ auto* helper =
+ program.AST().Functions().Find(program.Symbols().Get("helper"));
+ ASSERT_NE(helper, nullptr);
+ ASSERT_GT(helper->body()->size(), 0u);
+ auto* call = helper->body()->get(0)->As<ast::CallStatement>();
ASSERT_NE(call, nullptr);
EXPECT_EQ(call->expr()->params().size(), 0u);
auto* sem_call = program.Sem().Get(call->expr());
@@ -75,23 +81,29 @@
TEST_F(SpvParserTest, StorageBarrier) {
auto program = ParseAndBuild(R"(
+ OpName %helper "helper"
%void = OpTypeVoid
%1 = OpTypeFunction %void
%uint = OpTypeInt 32 0
%uint_2 = OpConstant %uint 2
%uint_1 = OpConstant %uint 1
%uint_72 = OpConstant %uint 72
- %main = OpFunction %void None %1
+ %helper = OpFunction %void None %1
%4 = OpLabel
OpControlBarrier %uint_2 %uint_1 %uint_72
OpReturn
OpFunctionEnd
+ %main = OpFunction %void None %1
+ %5 = OpLabel
+ OpReturn
+ OpFunctionEnd
)");
ASSERT_TRUE(program.IsValid()) << program.Diagnostics().str();
- auto* main = program.AST().Functions().Find(program.Symbols().Get("main"));
- ASSERT_NE(main, nullptr);
- ASSERT_GT(main->body()->size(), 0u);
- auto* call = main->body()->get(0)->As<ast::CallStatement>();
+ auto* helper =
+ program.AST().Functions().Find(program.Symbols().Get("helper"));
+ ASSERT_NE(helper, nullptr);
+ ASSERT_GT(helper->body()->size(), 0u);
+ auto* call = helper->body()->get(0)->As<ast::CallStatement>();
ASSERT_NE(call, nullptr);
EXPECT_EQ(call->expr()->params().size(), 0u);
auto* sem_call = program.Sem().Get(call->expr());
diff --git a/src/reader/spirv/parser_impl_convert_type_test.cc b/src/reader/spirv/parser_impl_convert_type_test.cc
index 6268a01..a6b7d5b 100644
--- a/src/reader/spirv/parser_impl_convert_type_test.cc
+++ b/src/reader/spirv/parser_impl_convert_type_test.cc
@@ -672,7 +672,7 @@
auto* ptr_ty = type->As<Pointer>();
EXPECT_NE(ptr_ty, nullptr);
EXPECT_TRUE(ptr_ty->type->Is<F32>());
- EXPECT_EQ(ptr_ty->storage_class, ast::StorageClass::kInput);
+ EXPECT_EQ(ptr_ty->storage_class, ast::StorageClass::kPrivate);
EXPECT_TRUE(p->error().empty());
}
@@ -688,7 +688,7 @@
auto* ptr_ty = type->As<Pointer>();
EXPECT_NE(ptr_ty, nullptr);
EXPECT_TRUE(ptr_ty->type->Is<F32>());
- EXPECT_EQ(ptr_ty->storage_class, ast::StorageClass::kOutput);
+ EXPECT_EQ(ptr_ty->storage_class, ast::StorageClass::kPrivate);
EXPECT_TRUE(p->error().empty());
}
@@ -819,12 +819,12 @@
auto* ptr_ty = type->As<Pointer>();
EXPECT_NE(ptr_ty, nullptr);
- EXPECT_EQ(ptr_ty->storage_class, ast::StorageClass::kInput);
+ EXPECT_EQ(ptr_ty->storage_class, ast::StorageClass::kPrivate);
EXPECT_TRUE(ptr_ty->type->Is<Pointer>());
auto* ptr_ptr_ty = ptr_ty->type->As<Pointer>();
EXPECT_NE(ptr_ptr_ty, nullptr);
- EXPECT_EQ(ptr_ptr_ty->storage_class, ast::StorageClass::kOutput);
+ EXPECT_EQ(ptr_ptr_ty->storage_class, ast::StorageClass::kPrivate);
EXPECT_TRUE(ptr_ptr_ty->type->Is<F32>());
EXPECT_TRUE(p->error().empty());
diff --git a/src/reader/spirv/parser_impl_function_decl_test.cc b/src/reader/spirv/parser_impl_function_decl_test.cc
index afe5437..e573c8d 100644
--- a/src/reader/spirv/parser_impl_function_decl_test.cc
+++ b/src/reader/spirv/parser_impl_function_decl_test.cc
@@ -283,14 +283,7 @@
}
}
Return{}
- }
- Function x_100 -> __void
- StageDecoration{vertex}
- ()
- {
- Return{}
- }
-})")) << program_ast;
+ })")) << program_ast;
}
TEST_F(SpvParserTest, EmitFunctions_NonVoidResultType) {
diff --git a/src/reader/spirv/parser_impl_module_var_test.cc b/src/reader/spirv/parser_impl_module_var_test.cc
index e3ff63c..e14d7f4 100644
--- a/src/reader/spirv/parser_impl_module_var_test.cc
+++ b/src/reader/spirv/parser_impl_module_var_test.cc
@@ -271,11 +271,8 @@
const auto module_str = p->program().to_str();
EXPECT_THAT(module_str, HasSubstr(R"(
Variable{
- Decorations{
- BuiltinDecoration{vertex_index}
- }
x_52
- in
+ private
undefined
__u32
})"));
@@ -305,39 +302,6 @@
)";
}
-TEST_F(SpvModuleScopeVarParserTest, BuiltinPosition_MapsToModuleScopeVec4Var) {
- // In Vulkan SPIR-V, Position is the first member of gl_PerVertex
- const std::string assembly = PerVertexPreamble() + R"(
- %main = OpFunction %void None %voidfn
- %entry = OpLabel
- OpReturn
- OpFunctionEnd
-)";
- auto p = parser(test::Assemble(assembly));
-
- EXPECT_TRUE(p->BuildAndParseInternalModule()) << assembly;
- EXPECT_TRUE(p->error().empty()) << p->error();
- const auto& position_info = p->GetBuiltInPositionInfo();
- EXPECT_EQ(position_info.struct_type_id, 10u);
- EXPECT_EQ(position_info.position_member_index, 0u);
- EXPECT_EQ(position_info.position_member_type_id, 12u);
- EXPECT_EQ(position_info.pointer_type_id, 11u);
- EXPECT_EQ(position_info.storage_class, SpvStorageClassOutput);
- EXPECT_EQ(position_info.per_vertex_var_id, 1u);
- const auto module_str = p->program().to_str();
- EXPECT_THAT(module_str, HasSubstr(R"(
- Variable{
- Decorations{
- BuiltinDecoration{position}
- }
- gl_Position
- out
- undefined
- __vec_4__f32
- })"))
- << module_str;
-}
-
TEST_F(SpvModuleScopeVarParserTest,
BuiltinPosition_StoreWholeStruct_NotSupported) {
// Glslang does not generate this code pattern.
@@ -552,21 +516,39 @@
EXPECT_TRUE(p->error().empty());
const auto module_str = p->program().to_str();
EXPECT_EQ(module_str, R"(Module{
+ Struct main_out {
+ StructMember{[[ BuiltinDecoration{position}
+ ]] gl_Position: __vec_4__f32}
+ }
Variable{
- Decorations{
- BuiltinDecoration{position}
- }
gl_Position
- out
+ private
undefined
__vec_4__f32
}
- Function main -> __void
- StageDecoration{vertex}
+ Function main_1 -> __void
()
{
Return{}
}
+ Function main -> __type_name_main_out
+ StageDecoration{vertex}
+ ()
+ {
+ Call[not set]{
+ Identifier[not set]{main_1}
+ (
+ )
+ }
+ Return{
+ {
+ TypeConstructor[not set]{
+ __type_name_main_out
+ Identifier[not set]{gl_Position}
+ }
+ }
+ }
+ }
}
)") << module_str;
}
@@ -610,6 +592,10 @@
EXPECT_TRUE(p->error().empty());
const auto module_str = p->program().to_str();
EXPECT_EQ(module_str, R"(Module{
+ Struct main_out {
+ StructMember{[[ BuiltinDecoration{position}
+ ]] gl_Position: __vec_4__f32}
+ }
Variable{
x_900
private
@@ -617,16 +603,12 @@
__f32
}
Variable{
- Decorations{
- BuiltinDecoration{position}
- }
gl_Position
- out
+ private
undefined
__vec_4__f32
}
- Function main -> __void
- StageDecoration{vertex}
+ Function main_1 -> __void
()
{
Assignment{
@@ -635,6 +617,24 @@
}
Return{}
}
+ Function main -> __type_name_main_out
+ StageDecoration{vertex}
+ ()
+ {
+ Call[not set]{
+ Identifier[not set]{main_1}
+ (
+ )
+ }
+ Return{
+ {
+ TypeConstructor[not set]{
+ __type_name_main_out
+ Identifier[not set]{gl_Position}
+ }
+ }
+ }
+ }
}
)") << module_str;
}
@@ -680,21 +680,39 @@
EXPECT_TRUE(p->error().empty());
const auto module_str = p->program().to_str();
EXPECT_EQ(module_str, R"(Module{
+ Struct main_out {
+ StructMember{[[ BuiltinDecoration{position}
+ ]] gl_Position: __vec_4__f32}
+ }
Variable{
- Decorations{
- BuiltinDecoration{position}
- }
gl_Position
- out
+ private
undefined
__vec_4__f32
}
- Function main -> __void
- StageDecoration{vertex}
+ Function main_1 -> __void
()
{
Return{}
}
+ Function main -> __type_name_main_out
+ StageDecoration{vertex}
+ ()
+ {
+ Call[not set]{
+ Identifier[not set]{main_1}
+ (
+ )
+ }
+ Return{
+ {
+ TypeConstructor[not set]{
+ __type_name_main_out
+ Identifier[not set]{gl_Position}
+ }
+ }
+ }
+ }
}
)") << module_str;
}
@@ -735,11 +753,20 @@
EXPECT_TRUE(p->error().empty());
const auto module_str = p->program().to_str();
EXPECT_EQ(module_str, R"(Module{
+ Function main_1 -> __void
+ ()
+ {
+ Return{}
+ }
Function main -> __void
StageDecoration{vertex}
()
{
- Return{}
+ Call[not set]{
+ Identifier[not set]{main_1}
+ (
+ )
+ }
}
}
)") << module_str;
@@ -788,8 +815,7 @@
undefined
__f32
}
- Function main -> __void
- StageDecoration{vertex}
+ Function main_1 -> __void
()
{
Assignment{
@@ -798,6 +824,16 @@
}
Return{}
}
+ Function main -> __void
+ StageDecoration{vertex}
+ ()
+ {
+ Call[not set]{
+ Identifier[not set]{main_1}
+ (
+ )
+ }
+ }
}
)") << module_str;
}
@@ -842,11 +878,20 @@
EXPECT_TRUE(p->error().empty());
const auto module_str = p->program().to_str();
EXPECT_EQ(module_str, R"(Module{
+ Function main_1 -> __void
+ ()
+ {
+ Return{}
+ }
Function main -> __void
StageDecoration{vertex}
()
{
- Return{}
+ Call[not set]{
+ Identifier[not set]{main_1}
+ (
+ )
+ }
}
}
)") << module_str;
@@ -870,11 +915,20 @@
EXPECT_TRUE(p->error().empty()) << p->error();
const auto module_str = p->program().to_str();
EXPECT_EQ(module_str, R"(Module{
+ Function main_1 -> __void
+ ()
+ {
+ Return{}
+ }
Function main -> __void
StageDecoration{vertex}
()
{
- Return{}
+ Call[not set]{
+ Identifier[not set]{main_1}
+ (
+ )
+ }
}
}
)") << module_str;
@@ -1655,30 +1709,6 @@
p->DeliberatelyInvalidSpirv();
}
-TEST_F(SpvModuleScopeVarParserTest, LocationDecoration_Valid) {
- auto p = parser(test::Assemble(Preamble() + FragMain() + R"(
- OpName %myvar "myvar"
- OpDecorate %myvar Location 3
-)" + CommonTypes() + R"(
- %ptr = OpTypePointer Input %uint
- %myvar = OpVariable %ptr Input
- )" + MainBody()));
- ASSERT_TRUE(p->BuildAndParseInternalModuleExceptFunctions()) << p->error();
- EXPECT_TRUE(p->error().empty());
- const auto module_str = p->program().to_str();
- EXPECT_THAT(module_str, HasSubstr(R"(
- Variable{
- Decorations{
- LocationDecoration{3}
- }
- myvar
- in
- undefined
- __u32
- })"))
- << module_str;
-}
-
TEST_F(SpvModuleScopeVarParserTest,
LocationDecoration_MissingOperandWontAssemble) {
const auto assembly = Preamble() + FragMain() + R"(
@@ -2345,20 +2375,17 @@
ASSERT_TRUE(p->BuildAndParseInternalModule()) << p->error() << assembly;
EXPECT_TRUE(p->error().empty());
const auto module_str = p->program().to_str();
- // Correct declaration
- EXPECT_THAT(module_str, HasSubstr(R"(
+ const std::string expected =
+ R"(Module{
Variable{
- Decorations{
- BuiltinDecoration{sample_index}
- }
x_1
- in
+ private
undefined
- __u32
- })"));
-
- // Correct body
- EXPECT_THAT(module_str, HasSubstr(R"(
+ __i32
+ }
+ Function main_1 -> __void
+ ()
+ {
VariableDeclStatement{
VariableConst{
x_2
@@ -2366,14 +2393,41 @@
undefined
__i32
{
- TypeConstructor[not set]{
- __i32
- Identifier[not set]{x_1}
- }
+ Identifier[not set]{x_1}
}
}
- })"))
- << module_str;
+ }
+ Return{}
+ }
+ Function main -> __void
+ StageDecoration{fragment}
+ (
+ VariableConst{
+ Decorations{
+ BuiltinDecoration{sample_index}
+ }
+ x_1_param
+ none
+ undefined
+ __u32
+ }
+ )
+ {
+ Assignment{
+ Identifier[not set]{x_1}
+ Bitcast[not set]<__i32>{
+ Identifier[not set]{x_1_param}
+ }
+ }
+ Call[not set]{
+ Identifier[not set]{main_1}
+ (
+ )
+ }
+ }
+}
+)";
+ EXPECT_EQ(module_str, expected) << module_str;
}
TEST_F(SpvModuleScopeVarParserTest, SampleId_I32_Load_CopyObject) {
@@ -2389,19 +2443,17 @@
ASSERT_TRUE(p->BuildAndParseInternalModule()) << p->error() << assembly;
EXPECT_TRUE(p->error().empty());
const auto module_str = p->program().to_str();
+
// Correct declaration
EXPECT_THAT(module_str, HasSubstr(R"(
Variable{
- Decorations{
- BuiltinDecoration{sample_index}
- }
x_1
- in
+ private
undefined
- __u32
- })"));
+ __i32
+ })")) <<module_str;
- // Correct body
+ // Correct creation of value
EXPECT_THAT(module_str, HasSubstr(R"(
VariableDeclStatement{
VariableConst{
@@ -2410,14 +2462,35 @@
undefined
__i32
{
- TypeConstructor[not set]{
- __i32
- Identifier[not set]{x_1}
- }
+ Identifier[not set]{x_1}
}
}
})"))
<< module_str;
+
+ // Correct parameter on entry point
+ EXPECT_THAT(module_str, HasSubstr(R"(
+ Function main -> __void
+ StageDecoration{fragment}
+ (
+ VariableConst{
+ Decorations{
+ BuiltinDecoration{sample_index}
+ }
+ x_1_param
+ none
+ undefined
+ __u32
+ }
+ )
+ {
+ Assignment{
+ Identifier[not set]{x_1}
+ Bitcast[not set]<__i32>{
+ Identifier[not set]{x_1_param}
+ }
+ })"))
+ << module_str;
}
TEST_F(SpvModuleScopeVarParserTest, SampleId_I32_Load_AccessChain) {
@@ -2433,19 +2506,17 @@
ASSERT_TRUE(p->BuildAndParseInternalModule()) << p->error() << assembly;
EXPECT_TRUE(p->error().empty());
const auto module_str = p->program().to_str();
+
// Correct declaration
EXPECT_THAT(module_str, HasSubstr(R"(
Variable{
- Decorations{
- BuiltinDecoration{sample_index}
- }
x_1
- in
+ private
undefined
- __u32
- })"));
+ __i32
+ })")) <<module_str;
- // Correct body
+ // Correct creation of value
EXPECT_THAT(module_str, HasSubstr(R"(
VariableDeclStatement{
VariableConst{
@@ -2454,12 +2525,32 @@
undefined
__i32
{
- TypeConstructor[not set]{
- __i32
- Identifier[not set]{x_1}
- }
+ Identifier[not set]{x_1}
}
}
+ })"));
+
+ // Correct parameter on entry point
+ EXPECT_THAT(module_str, HasSubstr(R"(
+ Function main -> __void
+ StageDecoration{fragment}
+ (
+ VariableConst{
+ Decorations{
+ BuiltinDecoration{sample_index}
+ }
+ x_1_param
+ none
+ undefined
+ __u32
+ }
+ )
+ {
+ Assignment{
+ Identifier[not set]{x_1}
+ Bitcast[not set]<__i32>{
+ Identifier[not set]{x_1_param}
+ }
})"))
<< module_str;
}
@@ -2502,20 +2593,16 @@
ASSERT_TRUE(p->BuildAndParseInternalModule()) << p->error() << assembly;
EXPECT_TRUE(p->error().empty());
const auto module_str = p->program().to_str();
- // Correct declaration
- EXPECT_THAT(module_str, HasSubstr(R"(
+ const std::string expected = R"(Module{
Variable{
- Decorations{
- BuiltinDecoration{sample_index}
- }
x_1
- in
+ private
undefined
__u32
- })"));
-
- // Correct body
- EXPECT_THAT(module_str, HasSubstr(R"(
+ }
+ Function main_1 -> __void
+ ()
+ {
VariableDeclStatement{
VariableConst{
x_2
@@ -2526,8 +2613,36 @@
Identifier[not set]{x_1}
}
}
- })"))
- << module_str;
+ }
+ Return{}
+ }
+ Function main -> __void
+ StageDecoration{fragment}
+ (
+ VariableConst{
+ Decorations{
+ BuiltinDecoration{sample_index}
+ }
+ x_1_param
+ none
+ undefined
+ __u32
+ }
+ )
+ {
+ Assignment{
+ Identifier[not set]{x_1}
+ Identifier[not set]{x_1_param}
+ }
+ Call[not set]{
+ Identifier[not set]{main_1}
+ (
+ )
+ }
+ }
+}
+)";
+ EXPECT_EQ(module_str, expected) << module_str;
}
TEST_F(SpvModuleScopeVarParserTest, SampleId_U32_Load_CopyObject) {
@@ -2543,34 +2658,16 @@
ASSERT_TRUE(p->BuildAndParseInternalModule()) << p->error() << assembly;
EXPECT_TRUE(p->error().empty());
const auto module_str = p->program().to_str();
- // Correct declaration
- EXPECT_THAT(module_str, HasSubstr(R"(
+ const std::string expected = R"(Module{
Variable{
- Decorations{
- BuiltinDecoration{sample_index}
- }
x_1
- in
+ private
undefined
__u32
- })"));
-
- // Correct body
- EXPECT_THAT(module_str, HasSubstr(R"(
- VariableDeclStatement{
- VariableConst{
- x_11
- none
- undefined
- __ptr_in__u32
- {
- UnaryOp[not set]{
- address-of
- Identifier[not set]{x_1}
- }
- }
- }
- }
+ }
+ Function main_1 -> __void
+ ()
+ {
VariableDeclStatement{
VariableConst{
x_2
@@ -2578,14 +2675,39 @@
undefined
__u32
{
- UnaryOp[not set]{
- indirection
- Identifier[not set]{x_11}
- }
+ Identifier[not set]{x_1}
}
}
- })"))
- << module_str;
+ }
+ Return{}
+ }
+ Function main -> __void
+ StageDecoration{fragment}
+ (
+ VariableConst{
+ Decorations{
+ BuiltinDecoration{sample_index}
+ }
+ x_1_param
+ none
+ undefined
+ __u32
+ }
+ )
+ {
+ Assignment{
+ Identifier[not set]{x_1}
+ Identifier[not set]{x_1_param}
+ }
+ Call[not set]{
+ Identifier[not set]{main_1}
+ (
+ )
+ }
+ }
+}
+)";
+ EXPECT_EQ(module_str, expected) << module_str;
}
TEST_F(SpvModuleScopeVarParserTest, SampleId_U32_Load_AccessChain) {
@@ -2601,20 +2723,16 @@
ASSERT_TRUE(p->BuildAndParseInternalModule()) << p->error() << assembly;
EXPECT_TRUE(p->error().empty());
const auto module_str = p->program().to_str();
- // Correct declaration
- EXPECT_THAT(module_str, HasSubstr(R"(
+ const std::string expected = R"(Module{
Variable{
- Decorations{
- BuiltinDecoration{sample_index}
- }
x_1
- in
+ private
undefined
__u32
- })"));
-
- // Correct body
- EXPECT_THAT(module_str, HasSubstr(R"(
+ }
+ Function main_1 -> __void
+ ()
+ {
VariableDeclStatement{
VariableConst{
x_2
@@ -2625,8 +2743,36 @@
Identifier[not set]{x_1}
}
}
- })"))
- << module_str;
+ }
+ Return{}
+ }
+ Function main -> __void
+ StageDecoration{fragment}
+ (
+ VariableConst{
+ Decorations{
+ BuiltinDecoration{sample_index}
+ }
+ x_1_param
+ none
+ undefined
+ __u32
+ }
+ )
+ {
+ Assignment{
+ Identifier[not set]{x_1}
+ Identifier[not set]{x_1_param}
+ }
+ Call[not set]{
+ Identifier[not set]{main_1}
+ (
+ )
+ }
+ }
+}
+)";
+ EXPECT_EQ(module_str, expected) << module_str;
}
TEST_F(SpvModuleScopeVarParserTest, SampleId_U32_FunctParam) {
@@ -2655,13 +2801,22 @@
// Returns the start of a shader for testing SampleMask
// parameterized by store type.
-std::string SampleMaskPreamble(std::string store_type) {
- return R"(
+std::string SampleMaskPreamble(std::string store_type, uint32_t stride = 0u) {
+ return std::string(R"(
OpCapability Shader
OpMemoryModel Logical Simple
OpEntryPoint Fragment %main "main" %1
OpExecutionMode %main OriginUpperLeft
OpDecorate %1 BuiltIn SampleMask
+)") +
+ (stride > 0u ? R"(
+ OpDecorate %uarr1 ArrayStride 4
+ OpDecorate %uarr2 ArrayStride 4
+ OpDecorate %iarr1 ArrayStride 4
+ OpDecorate %iarr2 ArrayStride 4
+)"
+ : "") +
+ R"(
%void = OpTypeVoid
%voidfn = OpTypeFunction %void
%float = OpTypeFloat 32
@@ -2720,19 +2875,17 @@
ASSERT_TRUE(p->BuildAndParseInternalModule()) << p->error() << assembly;
EXPECT_TRUE(p->error().empty());
const auto module_str = p->program().to_str();
+
// Correct declaration
EXPECT_THAT(module_str, HasSubstr(R"(
Variable{
- Decorations{
- BuiltinDecoration{sample_mask}
- }
x_1
- in
+ private
undefined
- __u32
- })"));
+ __array__u32_1
+ })")) <<module_str;
- // Correct bodies
+ // Correct creation of value
EXPECT_THAT(module_str, HasSubstr(R"(
VariableDeclStatement{
VariableConst{
@@ -2741,9 +2894,36 @@
undefined
__u32
{
- Identifier[not set]{x_1}
+ ArrayAccessor[not set]{
+ Identifier[not set]{x_1}
+ ScalarConstructor[not set]{0}
+ }
}
}
+ })"));
+
+ // Correct parameter on entry point
+ EXPECT_THAT(module_str, HasSubstr(R"(
+ Function main -> __void
+ StageDecoration{fragment}
+ (
+ VariableConst{
+ Decorations{
+ BuiltinDecoration{sample_mask}
+ }
+ x_1_param
+ none
+ undefined
+ __u32
+ }
+ )
+ {
+ Assignment{
+ ArrayAccessor[not set]{
+ Identifier[not set]{x_1}
+ ScalarConstructor[not set]{0}
+ }
+ Identifier[not set]{x_1_param}
})"))
<< module_str;
}
@@ -2764,19 +2944,17 @@
ASSERT_TRUE(p->BuildAndParseInternalModule()) << p->error() << assembly;
EXPECT_TRUE(p->error().empty());
const auto module_str = p->program().to_str();
+
// Correct declaration
EXPECT_THAT(module_str, HasSubstr(R"(
Variable{
- Decorations{
- BuiltinDecoration{sample_mask}
- }
x_1
- in
+ private
undefined
- __u32
- })"));
+ __array__u32_1
+ })")) <<module_str;
- // Correct bodies
+ // Correct creation of value
EXPECT_THAT(module_str, HasSubstr(R"(
VariableDeclStatement{
VariableConst{
@@ -2785,9 +2963,36 @@
undefined
__u32
{
- Identifier[not set]{x_1}
+ ArrayAccessor[not set]{
+ Identifier[not set]{x_1}
+ ScalarConstructor[not set]{0}
+ }
}
}
+ })"));
+
+ // Correct parameter on entry point
+ EXPECT_THAT(module_str, HasSubstr(R"(
+ Function main -> __void
+ StageDecoration{fragment}
+ (
+ VariableConst{
+ Decorations{
+ BuiltinDecoration{sample_mask}
+ }
+ x_1_param
+ none
+ undefined
+ __u32
+ }
+ )
+ {
+ Assignment{
+ ArrayAccessor[not set]{
+ Identifier[not set]{x_1}
+ ScalarConstructor[not set]{0}
+ }
+ Identifier[not set]{x_1_param}
})"))
<< module_str;
}
@@ -2808,19 +3013,17 @@
ASSERT_TRUE(p->BuildAndParseInternalModule()) << p->error() << assembly;
EXPECT_TRUE(p->error().empty());
const auto module_str = p->program().to_str();
+
// Correct declaration
EXPECT_THAT(module_str, HasSubstr(R"(
Variable{
- Decorations{
- BuiltinDecoration{sample_mask}
- }
x_1
- in
+ private
undefined
- __u32
- })"));
+ __array__u32_1
+ })")) <<module_str;
- // Correct bodies
+ // Correct creation of value
EXPECT_THAT(module_str, HasSubstr(R"(
VariableDeclStatement{
VariableConst{
@@ -2829,9 +3032,36 @@
undefined
__u32
{
- Identifier[not set]{x_1}
+ ArrayAccessor[not set]{
+ Identifier[not set]{x_1}
+ ScalarConstructor[not set]{0}
+ }
}
}
+ })"));
+
+ // Correct parameter on entry point
+ EXPECT_THAT(module_str, HasSubstr(R"(
+ Function main -> __void
+ StageDecoration{fragment}
+ (
+ VariableConst{
+ Decorations{
+ BuiltinDecoration{sample_mask}
+ }
+ x_1_param
+ none
+ undefined
+ __u32
+ }
+ )
+ {
+ Assignment{
+ ArrayAccessor[not set]{
+ Identifier[not set]{x_1}
+ ScalarConstructor[not set]{0}
+ }
+ Identifier[not set]{x_1_param}
})"))
<< module_str;
}
@@ -2851,20 +3081,16 @@
ASSERT_TRUE(p->BuildAndParseInternalModule()) << p->error() << assembly;
EXPECT_TRUE(p->error().empty());
const auto module_str = p->program().to_str();
- // Correct declaration
- EXPECT_THAT(module_str, HasSubstr(R"(
+ const std::string expected = R"(Module{
Variable{
- Decorations{
- BuiltinDecoration{sample_mask}
- }
x_1
- in
+ private
undefined
- __u32
- })"));
-
- // Correct bodies
- EXPECT_THAT(module_str, HasSubstr(R"(
+ __array__i32_1
+ }
+ Function main_1 -> __void
+ ()
+ {
VariableDeclStatement{
VariableConst{
x_3
@@ -2872,14 +3098,47 @@
undefined
__i32
{
- TypeConstructor[not set]{
- __i32
+ ArrayAccessor[not set]{
Identifier[not set]{x_1}
+ ScalarConstructor[not set]{0}
}
}
}
- })"))
- << module_str;
+ }
+ Return{}
+ }
+ Function main -> __void
+ StageDecoration{fragment}
+ (
+ VariableConst{
+ Decorations{
+ BuiltinDecoration{sample_mask}
+ }
+ x_1_param
+ none
+ undefined
+ __u32
+ }
+ )
+ {
+ Assignment{
+ ArrayAccessor[not set]{
+ Identifier[not set]{x_1}
+ ScalarConstructor[not set]{0}
+ }
+ Bitcast[not set]<__i32>{
+ Identifier[not set]{x_1_param}
+ }
+ }
+ Call[not set]{
+ Identifier[not set]{main_1}
+ (
+ )
+ }
+ }
+}
+)";
+ EXPECT_EQ(module_str, expected) << module_str;
}
TEST_F(SpvModuleScopeVarParserTest, SampleMask_In_I32_CopyObject) {
@@ -2898,20 +3157,16 @@
ASSERT_TRUE(p->BuildAndParseInternalModule()) << p->error() << assembly;
EXPECT_TRUE(p->error().empty());
const auto module_str = p->program().to_str();
- // Correct declaration
- EXPECT_THAT(module_str, HasSubstr(R"(
+ const std::string expected = R"(Module{
Variable{
- Decorations{
- BuiltinDecoration{sample_mask}
- }
x_1
- in
+ private
undefined
- __u32
- })"));
-
- // Correct bodies
- EXPECT_THAT(module_str, HasSubstr(R"(
+ __array__i32_1
+ }
+ Function main_1 -> __void
+ ()
+ {
VariableDeclStatement{
VariableConst{
x_4
@@ -2919,14 +3174,47 @@
undefined
__i32
{
- TypeConstructor[not set]{
- __i32
+ ArrayAccessor[not set]{
Identifier[not set]{x_1}
+ ScalarConstructor[not set]{0}
}
}
}
- })"))
- << module_str;
+ }
+ Return{}
+ }
+ Function main -> __void
+ StageDecoration{fragment}
+ (
+ VariableConst{
+ Decorations{
+ BuiltinDecoration{sample_mask}
+ }
+ x_1_param
+ none
+ undefined
+ __u32
+ }
+ )
+ {
+ Assignment{
+ ArrayAccessor[not set]{
+ Identifier[not set]{x_1}
+ ScalarConstructor[not set]{0}
+ }
+ Bitcast[not set]<__i32>{
+ Identifier[not set]{x_1_param}
+ }
+ }
+ Call[not set]{
+ Identifier[not set]{main_1}
+ (
+ )
+ }
+ }
+}
+)";
+ EXPECT_EQ(module_str, expected) << module_str;
}
TEST_F(SpvModuleScopeVarParserTest, SampleMask_In_I32_AccessChain) {
@@ -2945,20 +3233,16 @@
ASSERT_TRUE(p->BuildAndParseInternalModule()) << p->error() << assembly;
EXPECT_TRUE(p->error().empty());
const auto module_str = p->program().to_str();
- // Correct declaration
- EXPECT_THAT(module_str, HasSubstr(R"(
+ const std::string expected = R"(Module{
Variable{
- Decorations{
- BuiltinDecoration{sample_mask}
- }
x_1
- in
+ private
undefined
- __u32
- })"));
-
- // Correct bodies
- EXPECT_THAT(module_str, HasSubstr(R"(
+ __array__i32_1
+ }
+ Function main_1 -> __void
+ ()
+ {
VariableDeclStatement{
VariableConst{
x_4
@@ -2966,14 +3250,47 @@
undefined
__i32
{
- TypeConstructor[not set]{
- __i32
+ ArrayAccessor[not set]{
Identifier[not set]{x_1}
+ ScalarConstructor[not set]{0}
}
}
}
- })"))
- << module_str;
+ }
+ Return{}
+ }
+ Function main -> __void
+ StageDecoration{fragment}
+ (
+ VariableConst{
+ Decorations{
+ BuiltinDecoration{sample_mask}
+ }
+ x_1_param
+ none
+ undefined
+ __u32
+ }
+ )
+ {
+ Assignment{
+ ArrayAccessor[not set]{
+ Identifier[not set]{x_1}
+ ScalarConstructor[not set]{0}
+ }
+ Bitcast[not set]<__i32>{
+ Identifier[not set]{x_1_param}
+ }
+ }
+ Call[not set]{
+ Identifier[not set]{main_1}
+ (
+ )
+ }
+ }
+}
+)";
+ EXPECT_EQ(module_str, expected) << module_str;
}
TEST_F(SpvModuleScopeVarParserTest, SampleMask_Out_ArraySize2_Error) {
@@ -3010,25 +3327,53 @@
ASSERT_TRUE(p->BuildAndParseInternalModule()) << p->error() << assembly;
EXPECT_TRUE(p->error().empty());
const auto module_str = p->program().to_str();
- // Correct declaration
- EXPECT_THAT(module_str, HasSubstr(R"(
+ const std::string expected = R"(Module{
+ Struct main_out {
+ StructMember{[[ BuiltinDecoration{sample_mask}
+ ]] x_1: __u32}
+ }
Variable{
- Decorations{
- BuiltinDecoration{sample_mask}
- }
x_1
- out
+ private
undefined
- __u32
- })"));
-
- // Correct bodies
- EXPECT_THAT(module_str, HasSubstr(R"(
+ __array__u32_1
+ }
+ Function main_1 -> __void
+ ()
+ {
Assignment{
- Identifier[not set]{x_1}
+ ArrayAccessor[not set]{
+ Identifier[not set]{x_1}
+ ScalarConstructor[not set]{0}
+ }
ScalarConstructor[not set]{0u}
- })"))
- << module_str;
+ }
+ Return{}
+ }
+ Function main -> __type_name_main_out
+ StageDecoration{fragment}
+ ()
+ {
+ Call[not set]{
+ Identifier[not set]{main_1}
+ (
+ )
+ }
+ Return{
+ {
+ TypeConstructor[not set]{
+ __type_name_main_out
+ ArrayAccessor[not set]{
+ Identifier[not set]{x_1}
+ ScalarConstructor[not set]{0}
+ }
+ }
+ }
+ }
+ }
+}
+)";
+ EXPECT_EQ(module_str, expected);
}
TEST_F(SpvModuleScopeVarParserTest, SampleMask_Out_U32_CopyObject) {
@@ -3047,25 +3392,53 @@
ASSERT_TRUE(p->BuildAndParseInternalModule()) << p->error() << assembly;
EXPECT_TRUE(p->error().empty());
const auto module_str = p->program().to_str();
- // Correct declaration
- EXPECT_THAT(module_str, HasSubstr(R"(
+ const std::string expected = R"(Module{
+ Struct main_out {
+ StructMember{[[ BuiltinDecoration{sample_mask}
+ ]] x_1: __u32}
+ }
Variable{
- Decorations{
- BuiltinDecoration{sample_mask}
- }
x_1
- out
+ private
undefined
- __u32
- })"));
-
- // Correct bodies
- EXPECT_THAT(module_str, HasSubstr(R"(
+ __array__u32_1
+ }
+ Function main_1 -> __void
+ ()
+ {
Assignment{
- Identifier[not set]{x_1}
+ ArrayAccessor[not set]{
+ Identifier[not set]{x_1}
+ ScalarConstructor[not set]{0}
+ }
ScalarConstructor[not set]{0u}
- })"))
- << module_str;
+ }
+ Return{}
+ }
+ Function main -> __type_name_main_out
+ StageDecoration{fragment}
+ ()
+ {
+ Call[not set]{
+ Identifier[not set]{main_1}
+ (
+ )
+ }
+ Return{
+ {
+ TypeConstructor[not set]{
+ __type_name_main_out
+ ArrayAccessor[not set]{
+ Identifier[not set]{x_1}
+ ScalarConstructor[not set]{0}
+ }
+ }
+ }
+ }
+ }
+}
+)";
+ EXPECT_EQ(module_str, expected);
}
TEST_F(SpvModuleScopeVarParserTest, SampleMask_Out_U32_AccessChain) {
@@ -3084,25 +3457,53 @@
ASSERT_TRUE(p->BuildAndParseInternalModule()) << p->error() << assembly;
EXPECT_TRUE(p->error().empty());
const auto module_str = p->program().to_str();
- // Correct declaration
- EXPECT_THAT(module_str, HasSubstr(R"(
+ const std::string expected = R"(Module{
+ Struct main_out {
+ StructMember{[[ BuiltinDecoration{sample_mask}
+ ]] x_1: __u32}
+ }
Variable{
- Decorations{
- BuiltinDecoration{sample_mask}
- }
x_1
- out
+ private
undefined
- __u32
- })"));
-
- // Correct bodies
- EXPECT_THAT(module_str, HasSubstr(R"(
+ __array__u32_1
+ }
+ Function main_1 -> __void
+ ()
+ {
Assignment{
- Identifier[not set]{x_1}
+ ArrayAccessor[not set]{
+ Identifier[not set]{x_1}
+ ScalarConstructor[not set]{0}
+ }
ScalarConstructor[not set]{0u}
- })"))
- << module_str;
+ }
+ Return{}
+ }
+ Function main -> __type_name_main_out
+ StageDecoration{fragment}
+ ()
+ {
+ Call[not set]{
+ Identifier[not set]{main_1}
+ (
+ )
+ }
+ Return{
+ {
+ TypeConstructor[not set]{
+ __type_name_main_out
+ ArrayAccessor[not set]{
+ Identifier[not set]{x_1}
+ ScalarConstructor[not set]{0}
+ }
+ }
+ }
+ }
+ }
+}
+)";
+ EXPECT_EQ(module_str, expected);
}
TEST_F(SpvModuleScopeVarParserTest, SampleMask_Out_I32_Direct) {
@@ -3120,31 +3521,55 @@
ASSERT_TRUE(p->BuildAndParseInternalModule()) << p->error() << assembly;
EXPECT_TRUE(p->error().empty());
const auto module_str = p->program().to_str();
- // Correct declaration
- EXPECT_THAT(module_str, HasSubstr(R"(
+ const std::string expected = R"(Module{
+ Struct main_out {
+ StructMember{[[ BuiltinDecoration{sample_mask}
+ ]] x_1: __u32}
+ }
Variable{
- Decorations{
- BuiltinDecoration{sample_mask}
- }
x_1
- out
+ private
undefined
- __u32
- })"));
-
- // Correct bodies
- EXPECT_THAT(module_str, HasSubstr(R"(
+ __array__i32_1
+ }
+ Function main_1 -> __void
+ ()
{
Assignment{
- Identifier[not set]{x_1}
- TypeConstructor[not set]{
- __u32
- ScalarConstructor[not set]{12}
+ ArrayAccessor[not set]{
+ Identifier[not set]{x_1}
+ ScalarConstructor[not set]{0}
}
+ ScalarConstructor[not set]{12}
}
Return{}
- })"))
- << module_str;
+ }
+ Function main -> __type_name_main_out
+ StageDecoration{fragment}
+ ()
+ {
+ Call[not set]{
+ Identifier[not set]{main_1}
+ (
+ )
+ }
+ Return{
+ {
+ TypeConstructor[not set]{
+ __type_name_main_out
+ Bitcast[not set]<__u32>{
+ ArrayAccessor[not set]{
+ Identifier[not set]{x_1}
+ ScalarConstructor[not set]{0}
+ }
+ }
+ }
+ }
+ }
+ }
+}
+)";
+ EXPECT_EQ(module_str, expected);
}
TEST_F(SpvModuleScopeVarParserTest, SampleMask_Out_I32_CopyObject) {
@@ -3163,31 +3588,55 @@
ASSERT_TRUE(p->BuildAndParseInternalModule()) << p->error() << assembly;
EXPECT_TRUE(p->error().empty());
const auto module_str = p->program().to_str();
- // Correct declaration
- EXPECT_THAT(module_str, HasSubstr(R"(
+ const std::string expected = R"(Module{
+ Struct main_out {
+ StructMember{[[ BuiltinDecoration{sample_mask}
+ ]] x_1: __u32}
+ }
Variable{
- Decorations{
- BuiltinDecoration{sample_mask}
- }
x_1
- out
+ private
undefined
- __u32
- })"));
-
- // Correct bodies
- EXPECT_THAT(module_str, HasSubstr(R"(
+ __array__i32_1
+ }
+ Function main_1 -> __void
+ ()
{
Assignment{
- Identifier[not set]{x_1}
- TypeConstructor[not set]{
- __u32
- ScalarConstructor[not set]{12}
+ ArrayAccessor[not set]{
+ Identifier[not set]{x_1}
+ ScalarConstructor[not set]{0}
}
+ ScalarConstructor[not set]{12}
}
Return{}
- })"))
- << module_str;
+ }
+ Function main -> __type_name_main_out
+ StageDecoration{fragment}
+ ()
+ {
+ Call[not set]{
+ Identifier[not set]{main_1}
+ (
+ )
+ }
+ Return{
+ {
+ TypeConstructor[not set]{
+ __type_name_main_out
+ Bitcast[not set]<__u32>{
+ ArrayAccessor[not set]{
+ Identifier[not set]{x_1}
+ ScalarConstructor[not set]{0}
+ }
+ }
+ }
+ }
+ }
+ }
+}
+)";
+ EXPECT_EQ(module_str, expected);
}
TEST_F(SpvModuleScopeVarParserTest, SampleMask_Out_I32_AccessChain) {
@@ -3206,31 +3655,196 @@
ASSERT_TRUE(p->BuildAndParseInternalModule()) << p->error() << assembly;
EXPECT_TRUE(p->error().empty());
const auto module_str = p->program().to_str();
+ const std::string expected = R"(Module{
+ Struct main_out {
+ StructMember{[[ BuiltinDecoration{sample_mask}
+ ]] x_1: __u32}
+ }
+ Variable{
+ x_1
+ private
+ undefined
+ __array__i32_1
+ }
+ Function main_1 -> __void
+ ()
+ {
+ Assignment{
+ ArrayAccessor[not set]{
+ Identifier[not set]{x_1}
+ ScalarConstructor[not set]{0}
+ }
+ ScalarConstructor[not set]{12}
+ }
+ Return{}
+ }
+ Function main -> __type_name_main_out
+ StageDecoration{fragment}
+ ()
+ {
+ Call[not set]{
+ Identifier[not set]{main_1}
+ (
+ )
+ }
+ Return{
+ {
+ TypeConstructor[not set]{
+ __type_name_main_out
+ Bitcast[not set]<__u32>{
+ ArrayAccessor[not set]{
+ Identifier[not set]{x_1}
+ ScalarConstructor[not set]{0}
+ }
+ }
+ }
+ }
+ }
+ }
+}
+)";
+ EXPECT_EQ(module_str, expected);
+}
+
+TEST_F(SpvModuleScopeVarParserTest, SampleMask_In_WithStride) {
+ const std::string assembly = SampleMaskPreamble("%uarr1", 4u) + R"(
+ %1 = OpVariable %in_ty Input
+
+ %main = OpFunction %void None %voidfn
+ %entry = OpLabel
+ %2 = OpAccessChain %uptr_in_ty %1 %uint_0
+ %3 = OpLoad %uint %2
+ OpReturn
+ OpFunctionEnd
+ )";
+ auto p = parser(test::Assemble(assembly));
+ ASSERT_TRUE(p->BuildAndParseInternalModule()) << p->error() << assembly;
+ EXPECT_TRUE(p->error().empty());
+ const auto module_str = p->program().to_str();
+
+ EXPECT_THAT(module_str, HasSubstr(R"(
+ Arr -> __array__u32_1_stride_4
+)")) << module_str;
+
// Correct declaration
EXPECT_THAT(module_str, HasSubstr(R"(
Variable{
- Decorations{
- BuiltinDecoration{sample_mask}
- }
x_1
- out
+ private
undefined
- __u32
- })"));
-
- // Correct bodies
- EXPECT_THAT(module_str, HasSubstr(R"(
- {
- Assignment{
- Identifier[not set]{x_1}
- TypeConstructor[not set]{
- __u32
- ScalarConstructor[not set]{12}
- }
- }
- Return{}
+ __type_name_Arr
})"))
<< module_str;
+
+ // Correct creation of value
+ EXPECT_THAT(module_str, HasSubstr(R"(
+ VariableDeclStatement{
+ VariableConst{
+ x_3
+ none
+ undefined
+ __u32
+ {
+ ArrayAccessor[not set]{
+ Identifier[not set]{x_1}
+ ScalarConstructor[not set]{0}
+ }
+ }
+ }
+ })"));
+
+ // Correct parameter on entry point
+ EXPECT_THAT(module_str, HasSubstr(R"(
+ Function main -> __void
+ StageDecoration{fragment}
+ (
+ VariableConst{
+ Decorations{
+ BuiltinDecoration{sample_mask}
+ }
+ x_1_param
+ none
+ undefined
+ __u32
+ }
+ )
+ {
+ Assignment{
+ ArrayAccessor[not set]{
+ Identifier[not set]{x_1}
+ ScalarConstructor[not set]{0}
+ }
+ Identifier[not set]{x_1_param}
+ })"))
+ << module_str;
+}
+
+TEST_F(SpvModuleScopeVarParserTest, SampleMask_Out_WithStride) {
+ const std::string assembly = SampleMaskPreamble("%uarr1", 4u) + R"(
+ %1 = OpVariable %out_ty Output
+
+ %main = OpFunction %void None %voidfn
+ %entry = OpLabel
+ %2 = OpAccessChain %uptr_out_ty %1 %uint_0
+ OpStore %2 %uint_0
+ OpReturn
+ OpFunctionEnd
+ )";
+ auto p = parser(test::Assemble(assembly));
+ ASSERT_TRUE(p->BuildAndParseInternalModule()) << p->error() << assembly;
+ EXPECT_TRUE(p->error().empty());
+ const auto module_str = p->program().to_str();
+ const std::string expected = R"(Module{
+ Arr -> __array__u32_1_stride_4
+ Arr_1 -> __array__u32_2_stride_4
+ Arr_2 -> __array__i32_1_stride_4
+ Arr_3 -> __array__i32_2_stride_4
+ Struct main_out {
+ StructMember{[[ BuiltinDecoration{sample_mask}
+ ]] x_1: __u32}
+ }
+ Variable{
+ x_1
+ private
+ undefined
+ __type_name_Arr
+ }
+ Function main_1 -> __void
+ ()
+ {
+ Assignment{
+ ArrayAccessor[not set]{
+ Identifier[not set]{x_1}
+ ScalarConstructor[not set]{0}
+ }
+ ScalarConstructor[not set]{0u}
+ }
+ Return{}
+ }
+ Function main -> __type_name_main_out
+ StageDecoration{fragment}
+ ()
+ {
+ Call[not set]{
+ Identifier[not set]{main_1}
+ (
+ )
+ }
+ Return{
+ {
+ TypeConstructor[not set]{
+ __type_name_main_out
+ ArrayAccessor[not set]{
+ Identifier[not set]{x_1}
+ ScalarConstructor[not set]{0}
+ }
+ }
+ }
+ }
+ }
+}
+)";
+ EXPECT_EQ(module_str, expected);
}
// Returns the start of a shader for testing VertexIndex,
@@ -3264,20 +3878,16 @@
ASSERT_TRUE(p->BuildAndParseInternalModule()) << p->error() << assembly;
EXPECT_TRUE(p->error().empty());
const auto module_str = p->program().to_str();
- // Correct declaration
- EXPECT_THAT(module_str, HasSubstr(R"(
+ const std::string expected = R"(Module{
Variable{
- Decorations{
- BuiltinDecoration{vertex_index}
- }
x_1
- in
+ private
undefined
- __u32
- })"));
-
- // Correct body
- EXPECT_THAT(module_str, HasSubstr(R"(
+ __i32
+ }
+ Function main_1 -> __void
+ ()
+ {
VariableDeclStatement{
VariableConst{
x_2
@@ -3285,14 +3895,41 @@
undefined
__i32
{
- TypeConstructor[not set]{
- __i32
- Identifier[not set]{x_1}
- }
+ Identifier[not set]{x_1}
}
}
- })"))
- << module_str;
+ }
+ Return{}
+ }
+ Function main -> __void
+ StageDecoration{vertex}
+ (
+ VariableConst{
+ Decorations{
+ BuiltinDecoration{vertex_index}
+ }
+ x_1_param
+ none
+ undefined
+ __u32
+ }
+ )
+ {
+ Assignment{
+ Identifier[not set]{x_1}
+ Bitcast[not set]<__i32>{
+ Identifier[not set]{x_1_param}
+ }
+ }
+ Call[not set]{
+ Identifier[not set]{main_1}
+ (
+ )
+ }
+ }
+}
+)";
+ EXPECT_EQ(module_str, expected) << module_str;
}
TEST_F(SpvModuleScopeVarParserTest, VertexIndex_I32_Load_CopyObject) {
@@ -3308,20 +3945,16 @@
ASSERT_TRUE(p->BuildAndParseInternalModule()) << p->error() << assembly;
EXPECT_TRUE(p->error().empty());
const auto module_str = p->program().to_str();
- // Correct declaration
- EXPECT_THAT(module_str, HasSubstr(R"(
+ const std::string expected = R"(Module{
Variable{
- Decorations{
- BuiltinDecoration{vertex_index}
- }
x_1
- in
+ private
undefined
- __u32
- })"));
-
- // Correct body
- EXPECT_THAT(module_str, HasSubstr(R"(
+ __i32
+ }
+ Function main_1 -> __void
+ ()
+ {
VariableDeclStatement{
VariableConst{
x_2
@@ -3329,14 +3962,41 @@
undefined
__i32
{
- TypeConstructor[not set]{
- __i32
- Identifier[not set]{x_1}
- }
+ Identifier[not set]{x_1}
}
}
- })"))
- << module_str;
+ }
+ Return{}
+ }
+ Function main -> __void
+ StageDecoration{vertex}
+ (
+ VariableConst{
+ Decorations{
+ BuiltinDecoration{vertex_index}
+ }
+ x_1_param
+ none
+ undefined
+ __u32
+ }
+ )
+ {
+ Assignment{
+ Identifier[not set]{x_1}
+ Bitcast[not set]<__i32>{
+ Identifier[not set]{x_1_param}
+ }
+ }
+ Call[not set]{
+ Identifier[not set]{main_1}
+ (
+ )
+ }
+ }
+}
+)";
+ EXPECT_EQ(module_str, expected);
}
TEST_F(SpvModuleScopeVarParserTest, VertexIndex_I32_Load_AccessChain) {
@@ -3352,20 +4012,16 @@
ASSERT_TRUE(p->BuildAndParseInternalModule()) << p->error() << assembly;
EXPECT_TRUE(p->error().empty());
const auto module_str = p->program().to_str();
- // Correct declaration
- EXPECT_THAT(module_str, HasSubstr(R"(
+ const std::string expected = R"(Module{
Variable{
- Decorations{
- BuiltinDecoration{vertex_index}
- }
x_1
- in
+ private
undefined
- __u32
- })"));
-
- // Correct body
- EXPECT_THAT(module_str, HasSubstr(R"(
+ __i32
+ }
+ Function main_1 -> __void
+ ()
+ {
VariableDeclStatement{
VariableConst{
x_2
@@ -3373,17 +4029,46 @@
undefined
__i32
{
- TypeConstructor[not set]{
- __i32
- Identifier[not set]{x_1}
- }
+ Identifier[not set]{x_1}
}
}
- })"))
- << module_str;
+ }
+ Return{}
+ }
+ Function main -> __void
+ StageDecoration{vertex}
+ (
+ VariableConst{
+ Decorations{
+ BuiltinDecoration{vertex_index}
+ }
+ x_1_param
+ none
+ undefined
+ __u32
+ }
+ )
+ {
+ Assignment{
+ Identifier[not set]{x_1}
+ Bitcast[not set]<__i32>{
+ Identifier[not set]{x_1_param}
+ }
+ }
+ Call[not set]{
+ Identifier[not set]{main_1}
+ (
+ )
+ }
+ }
+}
+)";
+ EXPECT_EQ(module_str, expected);
}
TEST_F(SpvModuleScopeVarParserTest, VertexIndex_I32_FunctParam) {
+ // TODO(dneto): Passing by pointer-to-input is not allowed.
+ // Remove this test.
const std::string assembly = VertexIndexPreamble("%int") + R"(
%helper_ty = OpTypeFunction %int %ptr_ty
%helper = OpFunction %int None %helper_ty
@@ -3421,20 +4106,16 @@
ASSERT_TRUE(p->BuildAndParseInternalModule()) << p->error() << assembly;
EXPECT_TRUE(p->error().empty());
const auto module_str = p->program().to_str();
- // Correct declaration
- EXPECT_THAT(module_str, HasSubstr(R"(
+ const std::string expected = R"(Module{
Variable{
- Decorations{
- BuiltinDecoration{vertex_index}
- }
x_1
- in
+ private
undefined
__u32
- })"));
-
- // Correct body
- EXPECT_THAT(module_str, HasSubstr(R"(
+ }
+ Function main_1 -> __void
+ ()
+ {
VariableDeclStatement{
VariableConst{
x_2
@@ -3445,8 +4126,36 @@
Identifier[not set]{x_1}
}
}
- })"))
- << module_str;
+ }
+ Return{}
+ }
+ Function main -> __void
+ StageDecoration{vertex}
+ (
+ VariableConst{
+ Decorations{
+ BuiltinDecoration{vertex_index}
+ }
+ x_1_param
+ none
+ undefined
+ __u32
+ }
+ )
+ {
+ Assignment{
+ Identifier[not set]{x_1}
+ Identifier[not set]{x_1_param}
+ }
+ Call[not set]{
+ Identifier[not set]{main_1}
+ (
+ )
+ }
+ }
+}
+)";
+ EXPECT_EQ(module_str, expected);
}
TEST_F(SpvModuleScopeVarParserTest, VertexIndex_U32_Load_CopyObject) {
@@ -3462,34 +4171,16 @@
ASSERT_TRUE(p->BuildAndParseInternalModule()) << p->error() << assembly;
EXPECT_TRUE(p->error().empty());
const auto module_str = p->program().to_str();
- // Correct declaration
- EXPECT_THAT(module_str, HasSubstr(R"(
+ const std::string expected = R"(Module{
Variable{
- Decorations{
- BuiltinDecoration{vertex_index}
- }
x_1
- in
+ private
undefined
__u32
- })"));
-
- // Correct body
- EXPECT_THAT(module_str, HasSubstr(R"(
- VariableDeclStatement{
- VariableConst{
- x_11
- none
- undefined
- __ptr_in__u32
- {
- UnaryOp[not set]{
- address-of
- Identifier[not set]{x_1}
- }
- }
- }
- }
+ }
+ Function main_1 -> __void
+ ()
+ {
VariableDeclStatement{
VariableConst{
x_2
@@ -3497,14 +4188,39 @@
undefined
__u32
{
- UnaryOp[not set]{
- indirection
- Identifier[not set]{x_11}
- }
+ Identifier[not set]{x_1}
}
}
- })"))
- << module_str;
+ }
+ Return{}
+ }
+ Function main -> __void
+ StageDecoration{vertex}
+ (
+ VariableConst{
+ Decorations{
+ BuiltinDecoration{vertex_index}
+ }
+ x_1_param
+ none
+ undefined
+ __u32
+ }
+ )
+ {
+ Assignment{
+ Identifier[not set]{x_1}
+ Identifier[not set]{x_1_param}
+ }
+ Call[not set]{
+ Identifier[not set]{main_1}
+ (
+ )
+ }
+ }
+}
+)";
+ EXPECT_EQ(module_str, expected);
}
TEST_F(SpvModuleScopeVarParserTest, VertexIndex_U32_Load_AccessChain) {
@@ -3520,20 +4236,16 @@
ASSERT_TRUE(p->BuildAndParseInternalModule()) << p->error() << assembly;
EXPECT_TRUE(p->error().empty());
const auto module_str = p->program().to_str();
- // Correct declaration
- EXPECT_THAT(module_str, HasSubstr(R"(
+ const std::string expected = R"(Module{
Variable{
- Decorations{
- BuiltinDecoration{vertex_index}
- }
x_1
- in
+ private
undefined
__u32
- })"));
-
- // Correct body
- EXPECT_THAT(module_str, HasSubstr(R"(
+ }
+ Function main_1 -> __void
+ ()
+ {
VariableDeclStatement{
VariableConst{
x_2
@@ -3544,8 +4256,36 @@
Identifier[not set]{x_1}
}
}
- })"))
- << module_str;
+ }
+ Return{}
+ }
+ Function main -> __void
+ StageDecoration{vertex}
+ (
+ VariableConst{
+ Decorations{
+ BuiltinDecoration{vertex_index}
+ }
+ x_1_param
+ none
+ undefined
+ __u32
+ }
+ )
+ {
+ Assignment{
+ Identifier[not set]{x_1}
+ Identifier[not set]{x_1_param}
+ }
+ Call[not set]{
+ Identifier[not set]{main_1}
+ (
+ )
+ }
+ }
+}
+)";
+ EXPECT_EQ(module_str, expected);
}
TEST_F(SpvModuleScopeVarParserTest, VertexIndex_U32_FunctParam) {
@@ -3604,20 +4344,16 @@
ASSERT_TRUE(p->BuildAndParseInternalModule()) << p->error() << assembly;
EXPECT_TRUE(p->error().empty());
const auto module_str = p->program().to_str();
- // Correct declaration
- EXPECT_THAT(module_str, HasSubstr(R"(
+ const std::string expected = R"(Module{
Variable{
- Decorations{
- BuiltinDecoration{instance_index}
- }
x_1
- in
+ private
undefined
- __u32
- })"));
-
- // Correct body
- EXPECT_THAT(module_str, HasSubstr(R"(
+ __i32
+ }
+ Function main_1 -> __void
+ ()
+ {
VariableDeclStatement{
VariableConst{
x_2
@@ -3625,14 +4361,41 @@
undefined
__i32
{
- TypeConstructor[not set]{
- __i32
- Identifier[not set]{x_1}
- }
+ Identifier[not set]{x_1}
}
}
- })"))
- << module_str;
+ }
+ Return{}
+ }
+ Function main -> __void
+ StageDecoration{vertex}
+ (
+ VariableConst{
+ Decorations{
+ BuiltinDecoration{instance_index}
+ }
+ x_1_param
+ none
+ undefined
+ __u32
+ }
+ )
+ {
+ Assignment{
+ Identifier[not set]{x_1}
+ Bitcast[not set]<__i32>{
+ Identifier[not set]{x_1_param}
+ }
+ }
+ Call[not set]{
+ Identifier[not set]{main_1}
+ (
+ )
+ }
+ }
+}
+)";
+ EXPECT_EQ(module_str, expected) << module_str;
}
TEST_F(SpvModuleScopeVarParserTest, InstanceIndex_I32_Load_CopyObject) {
@@ -3648,20 +4411,16 @@
ASSERT_TRUE(p->BuildAndParseInternalModule()) << p->error() << assembly;
EXPECT_TRUE(p->error().empty());
const auto module_str = p->program().to_str();
- // Correct declaration
- EXPECT_THAT(module_str, HasSubstr(R"(
+ const std::string expected = R"(Module{
Variable{
- Decorations{
- BuiltinDecoration{instance_index}
- }
x_1
- in
+ private
undefined
- __u32
- })"));
-
- // Correct body
- EXPECT_THAT(module_str, HasSubstr(R"(
+ __i32
+ }
+ Function main_1 -> __void
+ ()
+ {
VariableDeclStatement{
VariableConst{
x_2
@@ -3669,14 +4428,41 @@
undefined
__i32
{
- TypeConstructor[not set]{
- __i32
- Identifier[not set]{x_1}
- }
+ Identifier[not set]{x_1}
}
}
- })"))
- << module_str;
+ }
+ Return{}
+ }
+ Function main -> __void
+ StageDecoration{vertex}
+ (
+ VariableConst{
+ Decorations{
+ BuiltinDecoration{instance_index}
+ }
+ x_1_param
+ none
+ undefined
+ __u32
+ }
+ )
+ {
+ Assignment{
+ Identifier[not set]{x_1}
+ Bitcast[not set]<__i32>{
+ Identifier[not set]{x_1_param}
+ }
+ }
+ Call[not set]{
+ Identifier[not set]{main_1}
+ (
+ )
+ }
+ }
+}
+)";
+ EXPECT_EQ(module_str, expected) << module_str;
}
TEST_F(SpvModuleScopeVarParserTest, InstanceIndex_I32_Load_AccessChain) {
@@ -3692,20 +4478,16 @@
ASSERT_TRUE(p->BuildAndParseInternalModule()) << p->error() << assembly;
EXPECT_TRUE(p->error().empty());
const auto module_str = p->program().to_str();
- // Correct declaration
- EXPECT_THAT(module_str, HasSubstr(R"(
+ const std::string expected = R"(Module{
Variable{
- Decorations{
- BuiltinDecoration{instance_index}
- }
x_1
- in
+ private
undefined
- __u32
- })"));
-
- // Correct body
- EXPECT_THAT(module_str, HasSubstr(R"(
+ __i32
+ }
+ Function main_1 -> __void
+ ()
+ {
VariableDeclStatement{
VariableConst{
x_2
@@ -3713,14 +4495,41 @@
undefined
__i32
{
- TypeConstructor[not set]{
- __i32
- Identifier[not set]{x_1}
- }
+ Identifier[not set]{x_1}
}
}
- })"))
- << module_str;
+ }
+ Return{}
+ }
+ Function main -> __void
+ StageDecoration{vertex}
+ (
+ VariableConst{
+ Decorations{
+ BuiltinDecoration{instance_index}
+ }
+ x_1_param
+ none
+ undefined
+ __u32
+ }
+ )
+ {
+ Assignment{
+ Identifier[not set]{x_1}
+ Bitcast[not set]<__i32>{
+ Identifier[not set]{x_1_param}
+ }
+ }
+ Call[not set]{
+ Identifier[not set]{main_1}
+ (
+ )
+ }
+ }
+}
+)";
+ EXPECT_EQ(module_str, expected) << module_str;
}
TEST_F(SpvModuleScopeVarParserTest, InstanceIndex_I32_FunctParam) {
@@ -3759,20 +4568,16 @@
ASSERT_TRUE(p->BuildAndParseInternalModule()) << p->error() << assembly;
EXPECT_TRUE(p->error().empty());
const auto module_str = p->program().to_str();
- // Correct declaration
- EXPECT_THAT(module_str, HasSubstr(R"(
+ const std::string expected = R"(Module{
Variable{
- Decorations{
- BuiltinDecoration{instance_index}
- }
x_1
- in
+ private
undefined
__u32
- })"));
-
- // Correct body
- EXPECT_THAT(module_str, HasSubstr(R"(
+ }
+ Function main_1 -> __void
+ ()
+ {
VariableDeclStatement{
VariableConst{
x_2
@@ -3783,8 +4588,36 @@
Identifier[not set]{x_1}
}
}
- })"))
- << module_str;
+ }
+ Return{}
+ }
+ Function main -> __void
+ StageDecoration{vertex}
+ (
+ VariableConst{
+ Decorations{
+ BuiltinDecoration{instance_index}
+ }
+ x_1_param
+ none
+ undefined
+ __u32
+ }
+ )
+ {
+ Assignment{
+ Identifier[not set]{x_1}
+ Identifier[not set]{x_1_param}
+ }
+ Call[not set]{
+ Identifier[not set]{main_1}
+ (
+ )
+ }
+ }
+}
+)";
+ EXPECT_EQ(module_str, expected);
}
TEST_F(SpvModuleScopeVarParserTest, InstanceIndex_U32_Load_CopyObject) {
@@ -3800,34 +4633,16 @@
ASSERT_TRUE(p->BuildAndParseInternalModule()) << p->error() << assembly;
EXPECT_TRUE(p->error().empty());
const auto module_str = p->program().to_str();
- // Correct declaration
- EXPECT_THAT(module_str, HasSubstr(R"(
+ const std::string expected = R"(Module{
Variable{
- Decorations{
- BuiltinDecoration{instance_index}
- }
x_1
- in
+ private
undefined
__u32
- })"));
-
- // Correct body
- EXPECT_THAT(module_str, HasSubstr(R"(
- VariableDeclStatement{
- VariableConst{
- x_11
- none
- undefined
- __ptr_in__u32
- {
- UnaryOp[not set]{
- address-of
- Identifier[not set]{x_1}
- }
- }
- }
- }
+ }
+ Function main_1 -> __void
+ ()
+ {
VariableDeclStatement{
VariableConst{
x_2
@@ -3835,14 +4650,39 @@
undefined
__u32
{
- UnaryOp[not set]{
- indirection
- Identifier[not set]{x_11}
- }
+ Identifier[not set]{x_1}
}
}
- })"))
- << module_str;
+ }
+ Return{}
+ }
+ Function main -> __void
+ StageDecoration{vertex}
+ (
+ VariableConst{
+ Decorations{
+ BuiltinDecoration{instance_index}
+ }
+ x_1_param
+ none
+ undefined
+ __u32
+ }
+ )
+ {
+ Assignment{
+ Identifier[not set]{x_1}
+ Identifier[not set]{x_1_param}
+ }
+ Call[not set]{
+ Identifier[not set]{main_1}
+ (
+ )
+ }
+ }
+}
+)";
+ EXPECT_EQ(module_str, expected);
}
TEST_F(SpvModuleScopeVarParserTest, InstanceIndex_U32_Load_AccessChain) {
@@ -3858,20 +4698,16 @@
ASSERT_TRUE(p->BuildAndParseInternalModule()) << p->error() << assembly;
EXPECT_TRUE(p->error().empty());
const auto module_str = p->program().to_str();
- // Correct declaration
- EXPECT_THAT(module_str, HasSubstr(R"(
+ const std::string expected = R"(Module{
Variable{
- Decorations{
- BuiltinDecoration{instance_index}
- }
x_1
- in
+ private
undefined
__u32
- })"));
-
- // Correct body
- EXPECT_THAT(module_str, HasSubstr(R"(
+ }
+ Function main_1 -> __void
+ ()
+ {
VariableDeclStatement{
VariableConst{
x_2
@@ -3882,8 +4718,36 @@
Identifier[not set]{x_1}
}
}
- })"))
- << module_str;
+ }
+ Return{}
+ }
+ Function main -> __void
+ StageDecoration{vertex}
+ (
+ VariableConst{
+ Decorations{
+ BuiltinDecoration{instance_index}
+ }
+ x_1_param
+ none
+ undefined
+ __u32
+ }
+ )
+ {
+ Assignment{
+ Identifier[not set]{x_1}
+ Identifier[not set]{x_1_param}
+ }
+ Call[not set]{
+ Identifier[not set]{main_1}
+ (
+ )
+ }
+ }
+}
+)";
+ EXPECT_EQ(module_str, expected);
}
TEST_F(SpvModuleScopeVarParserTest, InstanceIndex_U32_FunctParam) {
@@ -4098,8 +4962,10 @@
const auto assembly = Preamble() + FragMain() + R"(
OpDecorate %1 BuiltIn SampleMask
)" + CommonTypes() + R"(
- %ptr_ty = OpTypePointer Output %uint
- %1 = OpVariable %ptr_ty Output %uint_1
+ %arr_ty = OpTypeArray %uint %uint_1
+ %ptr_ty = OpTypePointer Output %arr_ty
+ %arr_init = OpConstantComposite %arr_ty %uint_2
+ %1 = OpVariable %ptr_ty Output %arr_init
)" + MainBody();
auto p = parser(test::Assemble(assembly));
@@ -4115,9 +4981,12 @@
x_1
private
undefined
- __u32
+ __array__u32_1
{
- ScalarConstructor[not set]{1u}
+ TypeConstructor[not set]{
+ __array__u32_1
+ ScalarConstructor[not set]{2u}
+ }
}
}
)";
@@ -4131,8 +5000,10 @@
const auto assembly = Preamble() + FragMain() + R"(
OpDecorate %1 BuiltIn SampleMask
)" + CommonTypes() + R"(
- %ptr_ty = OpTypePointer Output %int
- %1 = OpVariable %ptr_ty Output %int_14
+ %arr_ty = OpTypeArray %int %uint_1
+ %ptr_ty = OpTypePointer Output %arr_ty
+ %arr_init = OpConstantComposite %arr_ty %int_14
+ %1 = OpVariable %ptr_ty Output %arr_init
)" + MainBody();
auto p = parser(test::Assemble(assembly));
@@ -4148,9 +5019,12 @@
x_1
private
undefined
- __i32
+ __array__i32_1
{
- ScalarConstructor[not set]{14}
+ TypeConstructor[not set]{
+ __array__i32_1
+ ScalarConstructor[not set]{14}
+ }
}
}
)";
@@ -4333,12 +5207,11 @@
TEST_F(SpvModuleScopeVarParserTest,
EntryPointWrapping_BuiltinVar_Input_SameSignedness) {
- // local_invocation_index is u32 in WGSL. Use uint in SPIR-V.
+ // instance_index is u32 in WGSL. Use uint in SPIR-V.
// No bitcasts are used for parameter formation or return value.
const auto assembly = CommonCapabilities() + R"(
- OpEntryPoint GLCompute %main "main" %1
- OpExecutionMode %main LocalSize 1 1 1
- OpDecorate %1 BuiltIn LocalInvocationIndex
+ OpEntryPoint Vertex %main "main" %1
+ OpDecorate %1 BuiltIn InstanceIndex
)" + CommonTypes() +
R"(
%ptr_in_uint = OpTypePointer Input %uint
@@ -4346,6 +5219,8 @@
%main = OpFunction %void None %voidfn
%entry = OpLabel
+ %2 = OpLoad %uint %1 ; load same signedness
+ ;;;; %3 = OpLoad %int %1 ; loading different signedness is invalid.
OpReturn
OpFunctionEnd
)";
@@ -4368,14 +5243,25 @@
Function main_1 -> __void
()
{
+ VariableDeclStatement{
+ VariableConst{
+ x_2
+ none
+ undefined
+ __u32
+ {
+ Identifier[not set]{x_1}
+ }
+ }
+ }
Return{}
}
Function main -> __void
- StageDecoration{compute}
+ StageDecoration{vertex}
(
VariableConst{
Decorations{
- BuiltinDecoration{local_invocation_index}
+ BuiltinDecoration{instance_index}
}
x_1_param
none
@@ -4401,11 +5287,10 @@
TEST_F(SpvModuleScopeVarParserTest,
EntryPointWrapping_BuiltinVar_Input_OppositeSignedness) {
- // local_invocation_index is u32 in WGSL. Use int in SPIR-V.
+ // instance_index is u32 in WGSL. Use int in SPIR-V.
const auto assembly = CommonCapabilities() + R"(
- OpEntryPoint GLCompute %main "main" %1
- OpExecutionMode %main LocalSize 1 1 1
- OpDecorate %1 BuiltIn LocalInvocationIndex
+ OpEntryPoint Vertex %main "main" %1
+ OpDecorate %1 BuiltIn InstanceIndex
)" + CommonTypes() +
R"(
%ptr_in_int = OpTypePointer Input %int
@@ -4413,6 +5298,8 @@
%main = OpFunction %void None %voidfn
%entry = OpLabel
+ %2 = OpLoad %int %1 ; load same signedness
+ ;;; %3 = OpLoad %uint %1 ; loading different signedness is invalid
OpReturn
OpFunctionEnd
)";
@@ -4435,14 +5322,25 @@
Function main_1 -> __void
()
{
+ VariableDeclStatement{
+ VariableConst{
+ x_2
+ none
+ undefined
+ __i32
+ {
+ Identifier[not set]{x_1}
+ }
+ }
+ }
Return{}
}
Function main -> __void
- StageDecoration{compute}
+ StageDecoration{vertex}
(
VariableConst{
Decorations{
- BuiltinDecoration{local_invocation_index}
+ BuiltinDecoration{instance_index}
}
x_1_param
none
@@ -4524,11 +5422,11 @@
)
{
Assignment{
- Identifier[not set]{x_1}
ArrayAccessor[not set]{
- Identifier[not set]{x_1_param}
+ Identifier[not set]{x_1}
ScalarConstructor[not set]{0}
}
+ Identifier[not set]{x_1_param}
}
Call[not set]{
Identifier[not set]{main_1}
@@ -4596,12 +5494,12 @@
)
{
Assignment{
- Identifier[not set]{x_1}
+ ArrayAccessor[not set]{
+ Identifier[not set]{x_1}
+ ScalarConstructor[not set]{0}
+ }
Bitcast[not set]<__i32>{
- ArrayAccessor[not set]{
- Identifier[not set]{x_1_param}
- ScalarConstructor[not set]{0}
- }
+ Identifier[not set]{x_1_param}
}
}
Call[not set]{
@@ -4841,8 +5739,7 @@
EXPECT_EQ(got, expected) << got;
}
-TEST_F(SpvModuleScopeVarParserTest,
- BuiltinPosition_BuiltIn_Position_MapsToVec4) {
+TEST_F(SpvModuleScopeVarParserTest, BuiltinPosition_BuiltIn_Position) {
// In Vulkan SPIR-V, Position is the first member of gl_PerVertex
const std::string assembly = PerVertexPreamble() + R"(
%main = OpFunction %void None %voidfn
@@ -4999,11 +5896,10 @@
EXPECT_EQ(got, expected) << got;
}
-// TODO(dneto): pipeline IO: read PointSize
-// TODO(dneto): pipeline IO: write PointSize
-
// TODO(dneto): pipeline IO: flatten structures, and distribute locations
+// TODO(dneto): Translate Builtin LocalInvocationIndex crbug.com/tint/900
+
} // namespace
} // namespace spirv
} // namespace reader
diff --git a/test/access/let/matrix.spvasm.expected.hlsl b/test/access/let/matrix.spvasm.expected.hlsl
index 669ba11..7f13ac2 100644
--- a/test/access/let/matrix.spvasm.expected.hlsl
+++ b/test/access/let/matrix.spvasm.expected.hlsl
@@ -1,5 +1,10 @@
+void main_1() {
+ const float x_24 = float3x3(float3(1.0f, 2.0f, 3.0f), float3(4.0f, 5.0f, 6.0f), float3(7.0f, 8.0f, 9.0f))[1u].y;
+ return;
+}
+
[numthreads(1, 1, 1)]
void main() {
- const float x_24 = float3x3(float3(1.0f, 2.0f, 3.0f), float3(4.0f, 5.0f, 6.0f), float3(7.0f, 8.0f, 9.0f))[1u].y;
+ main_1();
return;
}
diff --git a/test/access/let/matrix.spvasm.expected.msl b/test/access/let/matrix.spvasm.expected.msl
index 2f5de98..2123a38 100644
--- a/test/access/let/matrix.spvasm.expected.msl
+++ b/test/access/let/matrix.spvasm.expected.msl
@@ -1,8 +1,13 @@
#include <metal_stdlib>
using namespace metal;
-kernel void tint_symbol() {
+void main_1() {
float const x_24 = float3x3(float3(1.0f, 2.0f, 3.0f), float3(4.0f, 5.0f, 6.0f), float3(7.0f, 8.0f, 9.0f))[1u].y;
return;
}
+kernel void tint_symbol() {
+ main_1();
+ return;
+}
+
diff --git a/test/access/let/matrix.spvasm.expected.spvasm b/test/access/let/matrix.spvasm.expected.spvasm
index fac85ae..7556cb3 100644
--- a/test/access/let/matrix.spvasm.expected.spvasm
+++ b/test/access/let/matrix.spvasm.expected.spvasm
@@ -1,12 +1,13 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 25
+; Bound: 28
; Schema: 0
OpCapability Shader
OpMemoryModel Logical GLSL450
OpEntryPoint GLCompute %main "main"
OpExecutionMode %main LocalSize 1 1 1
+ OpName %main_1 "main_1"
OpName %main "main"
%void = OpTypeVoid
%1 = OpTypeFunction %void
@@ -28,9 +29,14 @@
%20 = OpConstantComposite %mat3v3float %11 %15 %19
%uint = OpTypeInt 32 0
%uint_1 = OpConstant %uint 1
- %main = OpFunction %void None %1
+ %main_1 = OpFunction %void None %1
%4 = OpLabel
%23 = OpCompositeExtract %v3float %20 1
%24 = OpCompositeExtract %float %23 1
OpReturn
OpFunctionEnd
+ %main = OpFunction %void None %1
+ %26 = OpLabel
+ %27 = OpFunctionCall %void %main_1
+ OpReturn
+ OpFunctionEnd
diff --git a/test/access/let/matrix.spvasm.expected.wgsl b/test/access/let/matrix.spvasm.expected.wgsl
index 1dc7497..156324f 100644
--- a/test/access/let/matrix.spvasm.expected.wgsl
+++ b/test/access/let/matrix.spvasm.expected.wgsl
@@ -1,5 +1,9 @@
-[[stage(compute)]]
-fn main() {
+fn main_1() {
let x_24 : f32 = mat3x3<f32>(vec3<f32>(1.0, 2.0, 3.0), vec3<f32>(4.0, 5.0, 6.0), vec3<f32>(7.0, 8.0, 9.0))[1u].y;
return;
}
+
+[[stage(compute)]]
+fn main() {
+ main_1();
+}
diff --git a/test/access/let/vector.spvasm.expected.hlsl b/test/access/let/vector.spvasm.expected.hlsl
index d6ea890..cc37e54 100644
--- a/test/access/let/vector.spvasm.expected.hlsl
+++ b/test/access/let/vector.spvasm.expected.hlsl
@@ -1,7 +1,12 @@
-[numthreads(1, 1, 1)]
-void main() {
+void main_1() {
const float x_11 = float3(1.0f, 2.0f, 3.0f).y;
const float2 x_13 = float2(float3(1.0f, 2.0f, 3.0f).x, float3(1.0f, 2.0f, 3.0f).z);
const float3 x_14 = float3(float3(1.0f, 2.0f, 3.0f).x, float3(1.0f, 2.0f, 3.0f).z, float3(1.0f, 2.0f, 3.0f).y);
return;
}
+
+[numthreads(1, 1, 1)]
+void main() {
+ main_1();
+ return;
+}
diff --git a/test/access/let/vector.spvasm.expected.msl b/test/access/let/vector.spvasm.expected.msl
index 60e701c..d644226 100644
--- a/test/access/let/vector.spvasm.expected.msl
+++ b/test/access/let/vector.spvasm.expected.msl
@@ -1,10 +1,15 @@
#include <metal_stdlib>
using namespace metal;
-kernel void tint_symbol() {
+void main_1() {
float const x_11 = float3(1.0f, 2.0f, 3.0f).y;
float2 const x_13 = float2(float3(1.0f, 2.0f, 3.0f).x, float3(1.0f, 2.0f, 3.0f).z);
float3 const x_14 = float3(float3(1.0f, 2.0f, 3.0f).x, float3(1.0f, 2.0f, 3.0f).z, float3(1.0f, 2.0f, 3.0f).y);
return;
}
+kernel void tint_symbol() {
+ main_1();
+ return;
+}
+
diff --git a/test/access/let/vector.spvasm.expected.spvasm b/test/access/let/vector.spvasm.expected.spvasm
index 67e9f43..5b2e162 100644
--- a/test/access/let/vector.spvasm.expected.spvasm
+++ b/test/access/let/vector.spvasm.expected.spvasm
@@ -1,12 +1,13 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 20
+; Bound: 23
; Schema: 0
OpCapability Shader
OpMemoryModel Logical GLSL450
OpEntryPoint GLCompute %main "main"
OpExecutionMode %main LocalSize 1 1 1
+ OpName %main_1 "main_1"
OpName %main "main"
%void = OpTypeVoid
%1 = OpTypeFunction %void
@@ -17,7 +18,7 @@
%float_3 = OpConstant %float 3
%10 = OpConstantComposite %v3float %float_1 %float_2 %float_3
%v2float = OpTypeVector %float 2
- %main = OpFunction %void None %1
+ %main_1 = OpFunction %void None %1
%4 = OpLabel
%11 = OpCompositeExtract %float %10 1
%13 = OpCompositeExtract %float %10 0
@@ -29,3 +30,8 @@
%19 = OpCompositeConstruct %v3float %16 %17 %18
OpReturn
OpFunctionEnd
+ %main = OpFunction %void None %1
+ %21 = OpLabel
+ %22 = OpFunctionCall %void %main_1
+ OpReturn
+ OpFunctionEnd
diff --git a/test/access/let/vector.spvasm.expected.wgsl b/test/access/let/vector.spvasm.expected.wgsl
index c739e6c..3c3957f 100644
--- a/test/access/let/vector.spvasm.expected.wgsl
+++ b/test/access/let/vector.spvasm.expected.wgsl
@@ -1,7 +1,11 @@
-[[stage(compute)]]
-fn main() {
+fn main_1() {
let x_11 : f32 = vec3<f32>(1.0, 2.0, 3.0).y;
let x_13 : vec2<f32> = vec2<f32>(vec3<f32>(1.0, 2.0, 3.0).x, vec3<f32>(1.0, 2.0, 3.0).z);
let x_14 : vec3<f32> = vec3<f32>(vec3<f32>(1.0, 2.0, 3.0).x, vec3<f32>(1.0, 2.0, 3.0).z, vec3<f32>(1.0, 2.0, 3.0).y);
return;
}
+
+[[stage(compute)]]
+fn main() {
+ main_1();
+}
diff --git a/test/access/var/matrix.spvasm.expected.hlsl b/test/access/var/matrix.spvasm.expected.hlsl
index cd29235..6f7cb68 100644
--- a/test/access/var/matrix.spvasm.expected.hlsl
+++ b/test/access/var/matrix.spvasm.expected.hlsl
@@ -1,7 +1,12 @@
-[numthreads(1, 1, 1)]
-void main() {
+void main_1() {
float3x3 m = float3x3(float3(0.0f, 0.0f, 0.0f), float3(0.0f, 0.0f, 0.0f), float3(0.0f, 0.0f, 0.0f));
const float3 x_15 = m[1];
const float x_16 = x_15.y;
return;
}
+
+[numthreads(1, 1, 1)]
+void main() {
+ main_1();
+ return;
+}
diff --git a/test/access/var/matrix.spvasm.expected.msl b/test/access/var/matrix.spvasm.expected.msl
index 12a0b73..e22abd0 100644
--- a/test/access/var/matrix.spvasm.expected.msl
+++ b/test/access/var/matrix.spvasm.expected.msl
@@ -1,10 +1,15 @@
#include <metal_stdlib>
using namespace metal;
-kernel void tint_symbol() {
+void main_1() {
float3x3 m = float3x3(float3(0.0f, 0.0f, 0.0f), float3(0.0f, 0.0f, 0.0f), float3(0.0f, 0.0f, 0.0f));
float3 const x_15 = m[1];
float const x_16 = x_15.y;
return;
}
+kernel void tint_symbol() {
+ main_1();
+ return;
+}
+
diff --git a/test/access/var/matrix.spvasm.expected.spvasm b/test/access/var/matrix.spvasm.expected.spvasm
index 9cf8d90..299c71c 100644
--- a/test/access/var/matrix.spvasm.expected.spvasm
+++ b/test/access/var/matrix.spvasm.expected.spvasm
@@ -1,14 +1,15 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 20
+; Bound: 23
; Schema: 0
OpCapability Shader
OpMemoryModel Logical GLSL450
OpEntryPoint GLCompute %main "main"
OpExecutionMode %main LocalSize 1 1 1
- OpName %main "main"
+ OpName %main_1 "main_1"
OpName %m "m"
+ OpName %main "main"
%void = OpTypeVoid
%1 = OpTypeFunction %void
%float = OpTypeFloat 32
@@ -22,7 +23,7 @@
%int = OpTypeInt 32 1
%int_1 = OpConstant %int 1
%_ptr_Function_v3float = OpTypePointer Function %v3float
- %main = OpFunction %void None %1
+ %main_1 = OpFunction %void None %1
%4 = OpLabel
%m = OpVariable %_ptr_Function_mat3v3float Function %13
OpStore %m %10
@@ -31,3 +32,8 @@
%19 = OpCompositeExtract %float %18 1
OpReturn
OpFunctionEnd
+ %main = OpFunction %void None %1
+ %21 = OpLabel
+ %22 = OpFunctionCall %void %main_1
+ OpReturn
+ OpFunctionEnd
diff --git a/test/access/var/matrix.spvasm.expected.wgsl b/test/access/var/matrix.spvasm.expected.wgsl
index 58222f5..851efcc 100644
--- a/test/access/var/matrix.spvasm.expected.wgsl
+++ b/test/access/var/matrix.spvasm.expected.wgsl
@@ -1,7 +1,11 @@
-[[stage(compute)]]
-fn main() {
+fn main_1() {
var m : mat3x3<f32> = mat3x3<f32>(vec3<f32>(0.0, 0.0, 0.0), vec3<f32>(0.0, 0.0, 0.0), vec3<f32>(0.0, 0.0, 0.0));
let x_15 : vec3<f32> = m[1];
let x_16 : f32 = x_15.y;
return;
}
+
+[[stage(compute)]]
+fn main() {
+ main_1();
+}
diff --git a/test/access/var/vector.spvasm.expected.hlsl b/test/access/var/vector.spvasm.expected.hlsl
index 1517faa..eac8921 100644
--- a/test/access/var/vector.spvasm.expected.hlsl
+++ b/test/access/var/vector.spvasm.expected.hlsl
@@ -1,5 +1,4 @@
-[numthreads(1, 1, 1)]
-void main() {
+void main_1() {
float3 v = float3(0.0f, 0.0f, 0.0f);
const float x_14 = v.y;
const float3 x_16 = v;
@@ -8,3 +7,9 @@
const float3 x_19 = float3(x_18.x, x_18.z, x_18.y);
return;
}
+
+[numthreads(1, 1, 1)]
+void main() {
+ main_1();
+ return;
+}
diff --git a/test/access/var/vector.spvasm.expected.msl b/test/access/var/vector.spvasm.expected.msl
index fb9d008..a0bb9e4 100644
--- a/test/access/var/vector.spvasm.expected.msl
+++ b/test/access/var/vector.spvasm.expected.msl
@@ -1,7 +1,7 @@
#include <metal_stdlib>
using namespace metal;
-kernel void tint_symbol() {
+void main_1() {
float3 v = float3(0.0f, 0.0f, 0.0f);
float const x_14 = v.y;
float3 const x_16 = v;
@@ -11,3 +11,8 @@
return;
}
+kernel void tint_symbol() {
+ main_1();
+ return;
+}
+
diff --git a/test/access/var/vector.spvasm.expected.spvasm b/test/access/var/vector.spvasm.expected.spvasm
index 02f8dbc..de0f9d0 100644
--- a/test/access/var/vector.spvasm.expected.spvasm
+++ b/test/access/var/vector.spvasm.expected.spvasm
@@ -1,14 +1,15 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 27
+; Bound: 30
; Schema: 0
OpCapability Shader
OpMemoryModel Logical GLSL450
OpEntryPoint GLCompute %main "main"
OpExecutionMode %main LocalSize 1 1 1
- OpName %main "main"
+ OpName %main_1 "main_1"
OpName %v "v"
+ OpName %main "main"
%void = OpTypeVoid
%1 = OpTypeFunction %void
%float = OpTypeFloat 32
@@ -21,7 +22,7 @@
%uint_1 = OpConstant %uint 1
%_ptr_Function_float = OpTypePointer Function %float
%v2float = OpTypeVector %float 2
- %main = OpFunction %void None %1
+ %main_1 = OpFunction %void None %1
%4 = OpLabel
%v = OpVariable %_ptr_Function_v3float Function %11
OpStore %v %8
@@ -38,3 +39,8 @@
%26 = OpCompositeConstruct %v3float %23 %24 %25
OpReturn
OpFunctionEnd
+ %main = OpFunction %void None %1
+ %28 = OpLabel
+ %29 = OpFunctionCall %void %main_1
+ OpReturn
+ OpFunctionEnd
diff --git a/test/access/var/vector.spvasm.expected.wgsl b/test/access/var/vector.spvasm.expected.wgsl
index 0688604..ced274e 100644
--- a/test/access/var/vector.spvasm.expected.wgsl
+++ b/test/access/var/vector.spvasm.expected.wgsl
@@ -1,5 +1,4 @@
-[[stage(compute)]]
-fn main() {
+fn main_1() {
var v : vec3<f32> = vec3<f32>(0.0, 0.0, 0.0);
let x_14 : f32 = v.y;
let x_16 : vec3<f32> = v;
@@ -8,3 +7,8 @@
let x_19 : vec3<f32> = vec3<f32>(x_18.x, x_18.z, x_18.y);
return;
}
+
+[[stage(compute)]]
+fn main() {
+ main_1();
+}
diff --git a/test/array/assign_to_function_var.wgsl.expected.msl b/test/array/assign_to_function_var.wgsl.expected.msl
index 0ae6e42..7dec2d0 100644
--- a/test/array/assign_to_function_var.wgsl.expected.msl
+++ b/test/array/assign_to_function_var.wgsl.expected.msl
@@ -1 +1,53 @@
-SKIP: crbug.com/tint/649
+#include <metal_stdlib>
+
+using namespace metal;
+struct tint_padded_array_element {
+ /* 0x0000 */ int el;
+ /* 0x0004 */ int8_t tint_pad_0[12];
+};
+struct tint_array_wrapper {
+ /* 0x0000 */ tint_padded_array_element arr[4];
+};
+struct S {
+ /* 0x0000 */ tint_array_wrapper arr;
+};
+struct tint_array_wrapper_3 {
+ int arr[2];
+};
+struct tint_array_wrapper_2 {
+ tint_array_wrapper_3 arr[3];
+};
+struct tint_array_wrapper_1 {
+ tint_array_wrapper_2 arr[4];
+};
+
+tint_array_wrapper ret_arr() {
+ tint_array_wrapper const tint_symbol = {.arr={}};
+ return tint_symbol;
+}
+
+S ret_struct_arr() {
+ S const tint_symbol_1 = {};
+ return tint_symbol_1;
+}
+
+void foo(constant S& src_uniform, device S& src_storage, tint_array_wrapper src_param, thread tint_array_wrapper* const tint_symbol_3, threadgroup tint_array_wrapper* const tint_symbol_4) {
+ tint_array_wrapper src_function = {};
+ tint_array_wrapper dst = {};
+ tint_array_wrapper const tint_symbol_2 = {.arr={{.el=1}, {.el=2}, {.el=3}, {.el=3}}};
+ dst = tint_symbol_2;
+ dst = src_param;
+ dst = ret_arr();
+ tint_array_wrapper const src_let = {.arr={}};
+ dst = src_let;
+ dst = src_function;
+ dst = *(tint_symbol_3);
+ dst = *(tint_symbol_4);
+ dst = ret_struct_arr().arr;
+ dst = src_uniform.arr;
+ dst = src_storage.arr;
+ tint_array_wrapper_1 dst_nested = {};
+ tint_array_wrapper_1 src_nested = {};
+ dst_nested = src_nested;
+}
+
diff --git a/test/array/assign_to_private_var.wgsl.expected.msl b/test/array/assign_to_private_var.wgsl.expected.msl
index 0ae6e42..322db3b 100644
--- a/test/array/assign_to_private_var.wgsl.expected.msl
+++ b/test/array/assign_to_private_var.wgsl.expected.msl
@@ -1 +1,51 @@
-SKIP: crbug.com/tint/649
+#include <metal_stdlib>
+
+using namespace metal;
+struct tint_padded_array_element {
+ /* 0x0000 */ int el;
+ /* 0x0004 */ int8_t tint_pad_0[12];
+};
+struct tint_array_wrapper {
+ /* 0x0000 */ tint_padded_array_element arr[4];
+};
+struct S {
+ /* 0x0000 */ tint_array_wrapper arr;
+};
+struct tint_array_wrapper_3 {
+ int arr[2];
+};
+struct tint_array_wrapper_2 {
+ tint_array_wrapper_3 arr[3];
+};
+struct tint_array_wrapper_1 {
+ tint_array_wrapper_2 arr[4];
+};
+
+tint_array_wrapper ret_arr() {
+ tint_array_wrapper const tint_symbol = {.arr={}};
+ return tint_symbol;
+}
+
+S ret_struct_arr() {
+ S const tint_symbol_1 = {};
+ return tint_symbol_1;
+}
+
+void foo(constant S& src_uniform, device S& src_storage, tint_array_wrapper src_param, thread tint_array_wrapper* const tint_symbol_3, thread tint_array_wrapper* const tint_symbol_4, threadgroup tint_array_wrapper* const tint_symbol_5, thread tint_array_wrapper_1* const tint_symbol_6) {
+ tint_array_wrapper src_function = {};
+ tint_array_wrapper const tint_symbol_2 = {.arr={{.el=1}, {.el=2}, {.el=3}, {.el=3}}};
+ *(tint_symbol_3) = tint_symbol_2;
+ *(tint_symbol_3) = src_param;
+ *(tint_symbol_3) = ret_arr();
+ tint_array_wrapper const src_let = {.arr={}};
+ *(tint_symbol_3) = src_let;
+ *(tint_symbol_3) = src_function;
+ *(tint_symbol_3) = *(tint_symbol_4);
+ *(tint_symbol_3) = *(tint_symbol_5);
+ *(tint_symbol_3) = ret_struct_arr().arr;
+ *(tint_symbol_3) = src_uniform.arr;
+ *(tint_symbol_3) = src_storage.arr;
+ tint_array_wrapper_1 src_nested = {};
+ *(tint_symbol_6) = src_nested;
+}
+
diff --git a/test/array/assign_to_storage_var.wgsl.expected.msl b/test/array/assign_to_storage_var.wgsl.expected.msl
index 0ae6e42..f0a241a 100644
--- a/test/array/assign_to_storage_var.wgsl.expected.msl
+++ b/test/array/assign_to_storage_var.wgsl.expected.msl
@@ -1 +1,54 @@
-SKIP: crbug.com/tint/649
+#include <metal_stdlib>
+
+using namespace metal;
+struct tint_padded_array_element {
+ /* 0x0000 */ int el;
+ /* 0x0004 */ int8_t tint_pad_0[12];
+};
+struct tint_array_wrapper {
+ /* 0x0000 */ tint_padded_array_element arr[4];
+};
+struct S {
+ /* 0x0000 */ tint_array_wrapper arr;
+};
+struct tint_array_wrapper_3 {
+ /* 0x0000 */ int arr[2];
+};
+struct tint_array_wrapper_2 {
+ /* 0x0000 */ tint_array_wrapper_3 arr[3];
+};
+struct tint_array_wrapper_1 {
+ /* 0x0000 */ tint_array_wrapper_2 arr[4];
+};
+struct S_nested {
+ /* 0x0000 */ tint_array_wrapper_1 arr;
+};
+
+tint_array_wrapper ret_arr() {
+ tint_array_wrapper const tint_symbol = {.arr={}};
+ return tint_symbol;
+}
+
+S ret_struct_arr() {
+ S const tint_symbol_1 = {};
+ return tint_symbol_1;
+}
+
+void foo(constant S& src_uniform, device S& dst, device S& src_storage, device S_nested& dst_nested, tint_array_wrapper src_param, thread tint_array_wrapper* const tint_symbol_3, threadgroup tint_array_wrapper* const tint_symbol_4) {
+ tint_array_wrapper src_function = {};
+ tint_array_wrapper const tint_symbol_2 = {.arr={{.el=1}, {.el=2}, {.el=3}, {.el=3}}};
+ dst.arr = tint_symbol_2;
+ dst.arr = src_param;
+ dst.arr = ret_arr();
+ tint_array_wrapper const src_let = {.arr={}};
+ dst.arr = src_let;
+ dst.arr = src_function;
+ dst.arr = *(tint_symbol_3);
+ dst.arr = *(tint_symbol_4);
+ dst.arr = ret_struct_arr().arr;
+ dst.arr = src_uniform.arr;
+ dst.arr = src_storage.arr;
+ tint_array_wrapper_1 src_nested = {};
+ dst_nested.arr = src_nested;
+}
+
diff --git a/test/array/assign_to_workgroup_var.wgsl.expected.msl b/test/array/assign_to_workgroup_var.wgsl.expected.msl
index 0ae6e42..242b669 100644
--- a/test/array/assign_to_workgroup_var.wgsl.expected.msl
+++ b/test/array/assign_to_workgroup_var.wgsl.expected.msl
@@ -1 +1,51 @@
-SKIP: crbug.com/tint/649
+#include <metal_stdlib>
+
+using namespace metal;
+struct tint_padded_array_element {
+ /* 0x0000 */ int el;
+ /* 0x0004 */ int8_t tint_pad_0[12];
+};
+struct tint_array_wrapper {
+ /* 0x0000 */ tint_padded_array_element arr[4];
+};
+struct S {
+ /* 0x0000 */ tint_array_wrapper arr;
+};
+struct tint_array_wrapper_3 {
+ int arr[2];
+};
+struct tint_array_wrapper_2 {
+ tint_array_wrapper_3 arr[3];
+};
+struct tint_array_wrapper_1 {
+ tint_array_wrapper_2 arr[4];
+};
+
+tint_array_wrapper ret_arr() {
+ tint_array_wrapper const tint_symbol = {.arr={}};
+ return tint_symbol;
+}
+
+S ret_struct_arr() {
+ S const tint_symbol_1 = {};
+ return tint_symbol_1;
+}
+
+void foo(constant S& src_uniform, device S& src_storage, tint_array_wrapper src_param, threadgroup tint_array_wrapper* const tint_symbol_3, thread tint_array_wrapper* const tint_symbol_4, threadgroup tint_array_wrapper* const tint_symbol_5, threadgroup tint_array_wrapper_1* const tint_symbol_6) {
+ tint_array_wrapper src_function = {};
+ tint_array_wrapper const tint_symbol_2 = {.arr={{.el=1}, {.el=2}, {.el=3}, {.el=3}}};
+ *(tint_symbol_3) = tint_symbol_2;
+ *(tint_symbol_3) = src_param;
+ *(tint_symbol_3) = ret_arr();
+ tint_array_wrapper const src_let = {.arr={}};
+ *(tint_symbol_3) = src_let;
+ *(tint_symbol_3) = src_function;
+ *(tint_symbol_3) = *(tint_symbol_4);
+ *(tint_symbol_3) = *(tint_symbol_5);
+ *(tint_symbol_3) = ret_struct_arr().arr;
+ *(tint_symbol_3) = src_uniform.arr;
+ *(tint_symbol_3) = src_storage.arr;
+ tint_array_wrapper_1 src_nested = {};
+ *(tint_symbol_6) = src_nested;
+}
+
diff --git a/test/bug/tint/413.spvasm.expected.hlsl b/test/bug/tint/413.spvasm.expected.hlsl
index d933074..d285a8d 100644
--- a/test/bug/tint/413.spvasm.expected.hlsl
+++ b/test/bug/tint/413.spvasm.expected.hlsl
@@ -1,8 +1,7 @@
Texture2D<uint4> Src : register(t0, space0);
RWTexture2D<uint4> Dst : register(u1, space0);
-[numthreads(1, 1, 1)]
-void main() {
+void main_1() {
uint4 srcValue = uint4(0u, 0u, 0u, 0u);
const uint4 x_18 = Src.Load(int3(0, 0, 0));
srcValue = x_18;
@@ -12,3 +11,9 @@
Dst[int2(0, 0)] = x_27;
return;
}
+
+[numthreads(1, 1, 1)]
+void main() {
+ main_1();
+ return;
+}
diff --git a/test/bug/tint/413.spvasm.expected.spvasm b/test/bug/tint/413.spvasm.expected.spvasm
index cbaa55d..82c549f 100644
--- a/test/bug/tint/413.spvasm.expected.spvasm
+++ b/test/bug/tint/413.spvasm.expected.spvasm
@@ -1,7 +1,7 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 32
+; Bound: 35
; Schema: 0
OpCapability Shader
OpMemoryModel Logical GLSL450
@@ -9,8 +9,9 @@
OpExecutionMode %main LocalSize 1 1 1
OpName %Src "Src"
OpName %Dst "Dst"
- OpName %main "main"
+ OpName %main_1 "main_1"
OpName %srcValue "srcValue"
+ OpName %main "main"
OpDecorate %Src NonWritable
OpDecorate %Src DescriptorSet 0
OpDecorate %Src Binding 0
@@ -35,7 +36,7 @@
%uint_0 = OpConstant %uint 0
%_ptr_Function_uint = OpTypePointer Function %uint
%int_1 = OpConstant %int 1
- %main = OpFunction %void None %7
+ %main_1 = OpFunction %void None %7
%10 = OpLabel
%srcValue = OpVariable %_ptr_Function_v4uint Function %14
%16 = OpLoad %3 %Src
@@ -52,3 +53,8 @@
OpImageWrite %31 %20 %29
OpReturn
OpFunctionEnd
+ %main = OpFunction %void None %7
+ %33 = OpLabel
+ %34 = OpFunctionCall %void %main_1
+ OpReturn
+ OpFunctionEnd
diff --git a/test/bug/tint/413.spvasm.expected.wgsl b/test/bug/tint/413.spvasm.expected.wgsl
index 071a0cc..5a581e8 100644
--- a/test/bug/tint/413.spvasm.expected.wgsl
+++ b/test/bug/tint/413.spvasm.expected.wgsl
@@ -2,8 +2,7 @@
[[group(0), binding(1)]] var Dst : texture_storage_2d<r32uint, write>;
-[[stage(compute)]]
-fn main() {
+fn main_1() {
var srcValue : vec4<u32>;
let x_18 : vec4<u32> = textureLoad(Src, vec2<i32>(0, 0));
srcValue = x_18;
@@ -14,3 +13,8 @@
textureStore(Dst, vec2<i32>(0, 0), x_27);
return;
}
+
+[[stage(compute)]]
+fn main() {
+ main_1();
+}
diff --git a/test/bug/tint/749.spvasm.expected.hlsl b/test/bug/tint/749.spvasm.expected.hlsl
index 3697b88..c241a45 100644
--- a/test/bug/tint/749.spvasm.expected.hlsl
+++ b/test/bug/tint/749.spvasm.expected.hlsl
@@ -1,10 +1,1563 @@
-SKIP: FAILED
+struct tint_array_wrapper {
+ int arr[10];
+};
+struct QuicksortObject {
+ tint_array_wrapper numbers;
+};
+struct buf0 {
+ /* 0x0000 */ float2 resolution;
+};
-../src/writer/hlsl/generator_impl.cc:1547 internal compiler error: unhandled storage class in
-********************************************************************
-* The tint shader compiler has encountered an unexpected error. *
-* *
-* Please help us fix this issue by submitting a bug report at *
-* crbug.com/tint with the source program that triggered the bug. *
-********************************************************************
+static QuicksortObject obj;
+static float4 gl_FragCoord;
+ConstantBuffer<buf0> x_188 : register(b0, space0);
+static float4 x_GLF_color;
+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.arr[x_30_save];
+ obj.numbers.arr[x_30_save] = 0;
+ obj.numbers.arr[x_30_save] = x_936;
+ const int x_31 = obj.numbers.arr[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.arr[x_30_save];
+ obj.numbers.arr[x_30_save] = 0;
+ obj.numbers.arr[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.arr[x_30_save];
+ obj.numbers.arr[x_30_save] = 0;
+ obj.numbers.arr[x_30_save] = x_942;
+ const int x_34_save = x_33;
+ const int x_35 = obj.numbers.arr[x_34_save];
+ const QuicksortObject x_943 = obj;
+ const tint_array_wrapper tint_symbol_4 = {{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.arr[x_36_save] = x_35;
+ const QuicksortObject x_944 = obj;
+ const tint_array_wrapper tint_symbol_6 = {{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.arr[x_34_save];
+ obj.numbers.arr[x_34_save] = 0;
+ obj.numbers.arr[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.arr[x_36_save];
+ obj.numbers.arr[x_36_save] = 0;
+ obj.numbers.arr[x_36_save] = x_949;
+ const QuicksortObject x_950 = obj;
+ const tint_array_wrapper tint_symbol_8 = {{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.arr[x_34_save];
+ obj.numbers.arr[x_34_save] = 0;
+ obj.numbers.arr[x_34_save] = x_951;
+ obj.numbers.arr[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.arr[x_42_save];
+ obj.numbers.arr[x_42_save] = 0;
+ obj.numbers.arr[x_42_save] = x_954;
+ const int x_43 = obj.numbers.arr[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 tint_array_wrapper tint_symbol_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;
+ 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 tint_array_wrapper tint_symbol_12 = {{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.arr[x_42_save];
+ obj.numbers.arr[x_42_save] = 0;
+ obj.numbers.arr[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.arr[x_61_save];
+ const QuicksortObject x_972 = obj;
+ const tint_array_wrapper tint_symbol_14 = {{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;
+ const int x_72 = j_1;
+ param_1 = x_72;
+ 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 tint_array_wrapper tint_symbol_16 = {{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.arr[x_61_save];
+ obj.numbers.arr[x_61_save] = 0;
+ obj.numbers.arr[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.arr[x_61_save];
+ obj.numbers.arr[x_61_save] = 0;
+ obj.numbers.arr[x_61_save] = x_992;
+ }
+ }
+ const int x_76 = i_1;
+ const int x_993 = obj.numbers.arr[x_42_save];
+ obj.numbers.arr[x_42_save] = 0;
+ obj.numbers.arr[x_42_save] = x_993;
+ const float2 x_549 = float2(x_534.x, x_534.y);
+ const QuicksortObject x_994 = obj;
+ const tint_array_wrapper tint_symbol_18 = {{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;
+ tint_array_wrapper stack = {{0, 0, 0, 0, 0, 0, 0, 0, 0, 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 tint_array_wrapper x_1008 = stack;
+ const tint_array_wrapper tint_symbol_20 = {{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 tint_array_wrapper tint_symbol_21 = {{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 tint_array_wrapper x_1017 = stack;
+ const tint_array_wrapper tint_symbol_23 = {{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.arr[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.arr[x_96_save];
+ stack.arr[x_96_save] = 0;
+ stack.arr[x_96_save] = x_1021;
+ const int x_98 = (x_97 + 1);
+ const int x_1022 = stack.arr[x_96_save];
+ stack.arr[x_96_save] = 0;
+ stack.arr[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.arr[x_100_save] = x_99;
+ 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 tint_array_wrapper x_1029 = stack;
+ const tint_array_wrapper tint_symbol_24 = {{0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
+ stack = tint_symbol_24;
+ stack = x_1029;
+ const int x_106 = top;
+ const tint_array_wrapper x_1030 = stack;
+ const tint_array_wrapper tint_symbol_25 = {{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 tint_array_wrapper tint_symbol_26 = {{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.arr[x_96_save];
+ stack.arr[x_96_save] = 0;
+ stack.arr[x_96_save] = x_1037;
+ const int x_111 = stack.arr[x_110_save];
+ const tint_array_wrapper x_1038 = stack;
+ const tint_array_wrapper tint_symbol_28 = {{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 tint_array_wrapper x_1040 = stack;
+ const tint_array_wrapper tint_symbol_29 = {{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.arr[x_100_save];
+ stack.arr[x_100_save] = 0;
+ stack.arr[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.arr[x_100_save];
+ stack.arr[x_100_save] = 0;
+ stack.arr[x_100_save] = x_1046;
+ const int x_115 = stack.arr[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;
+ const int x_118 = l_1;
+ param_4 = x_118;
+ const int x_1050 = stack.arr[x_110_save];
+ stack.arr[x_110_save] = 0;
+ stack.arr[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.arr[x_100_save];
+ stack.arr[x_100_save] = 0;
+ stack.arr[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.arr[x_110_save];
+ stack.arr[x_110_save] = 0;
+ stack.arr[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.arr[x_100_save];
+ stack.arr[x_100_save] = 0;
+ stack.arr[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.arr[x_100_save];
+ stack.arr[x_100_save] = 0;
+ stack.arr[x_100_save] = x_1061;
+ const tint_array_wrapper x_1062 = stack;
+ const tint_array_wrapper tint_symbol_30 = {{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.arr[x_114_save];
+ stack.arr[x_114_save] = 0;
+ stack.arr[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.arr[x_110_save];
+ stack.arr[x_110_save] = 0;
+ stack.arr[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.arr[x_131_save] = x_130;
+ const int x_132 = top;
+ const int x_1067 = stack.arr[x_100_save];
+ stack.arr[x_100_save] = 0;
+ stack.arr[x_100_save] = x_1067;
+ const float2 x_588 = float2(x_575.y, x_575.x);
+ const int x_1068 = stack.arr[x_131_save];
+ stack.arr[x_131_save] = 0;
+ stack.arr[x_131_save] = x_1068;
+ const int x_133 = asint((1u + asuint(x_132)));
+ const int x_1069 = stack.arr[x_100_save];
+ stack.arr[x_100_save] = 0;
+ stack.arr[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 tint_array_wrapper x_1071 = stack;
+ const tint_array_wrapper tint_symbol_31 = {{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.arr[x_114_save];
+ stack.arr[x_114_save] = 0;
+ stack.arr[x_114_save] = x_1072;
+ const int x_136_save = x_133;
+ const int x_1073 = stack.arr[x_114_save];
+ stack.arr[x_114_save] = 0;
+ stack.arr[x_114_save] = x_1073;
+ stack.arr[x_136_save] = (x_134 - asint(1u));
+ const int x_1074 = stack.arr[x_96_save];
+ stack.arr[x_96_save] = 0;
+ stack.arr[x_96_save] = x_1074;
+ const float2 x_591 = float2(x_569.z, x_569.y);
+ const int x_1075 = stack.arr[x_136_save];
+ stack.arr[x_136_save] = 0;
+ stack.arr[x_136_save] = x_1075;
+ }
+ const int x_1076 = stack.arr[x_96_save];
+ stack.arr[x_96_save] = 0;
+ stack.arr[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 tint_array_wrapper tint_symbol_32 = {{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.arr[x_114_save];
+ stack.arr[x_114_save] = 0;
+ stack.arr[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.arr[x_114_save];
+ stack.arr[x_114_save] = 0;
+ stack.arr[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.arr[x_100_save];
+ stack.arr[x_100_save] = 0;
+ stack.arr[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.arr[x_114_save];
+ stack.arr[x_114_save] = 0;
+ stack.arr[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.arr[x_114_save];
+ stack.arr[x_114_save] = 0;
+ stack.arr[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.arr[x_114_save];
+ stack.arr[x_114_save] = 0;
+ stack.arr[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.arr[x_100_save];
+ stack.arr[x_100_save] = 0;
+ stack.arr[x_100_save] = x_1091;
+ const int x_147_save = x_144;
+ const int x_1092 = stack.arr[x_110_save];
+ stack.arr[x_110_save] = 0;
+ stack.arr[x_110_save] = x_1092;
+ const float2 x_601 = float2(x_563.x, x_563.y);
+ stack.arr[x_147_save] = asint((1u + asuint(x_145)));
+ const tint_array_wrapper x_1093 = stack;
+ const tint_array_wrapper tint_symbol_34 = {{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.arr[x_114_save];
+ stack.arr[x_114_save] = 0;
+ stack.arr[x_114_save] = x_1094;
+ const float2 x_602 = float2(x_565.y, x_599.y);
+ const tint_array_wrapper x_1095 = stack;
+ const tint_array_wrapper tint_symbol_35 = {{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.arr[x_147_save];
+ stack.arr[x_147_save] = 0;
+ stack.arr[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.arr[x_100_save];
+ stack.arr[x_100_save] = 0;
+ stack.arr[x_100_save] = x_1098;
+ const int x_1099 = stack.arr[x_96_save];
+ stack.arr[x_96_save] = 0;
+ stack.arr[x_96_save] = x_1099;
+ stack.arr[x_149] = x_150;
+ const int x_1100 = stack.arr[x_114_save];
+ stack.arr[x_114_save] = 0;
+ stack.arr[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.arr[x_100_save];
+ stack.arr[x_100_save] = 0;
+ stack.arr[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 tint_array_wrapper tint_symbol_36 = {{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 tint_array_wrapper tint_symbol_38 = {{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 tint_array_wrapper tint_symbol_40 = {{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 tint_array_wrapper tint_symbol_42 = {{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 tint_array_wrapper tint_symbol_44 = {{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 tint_array_wrapper tint_symbol_46 = {{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 tint_array_wrapper tint_symbol_48 = {{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 = x_188.resolution;
+ const QuicksortObject x_763 = obj;
+ const tint_array_wrapper tint_symbol_50 = {{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 tint_array_wrapper tint_symbol_52 = {{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 tint_array_wrapper tint_symbol_54 = {{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.arr[0u];
+ obj.numbers.arr[0u] = 0;
+ obj.numbers.arr[0u] = x_770;
+ const int x_201 = obj.numbers.arr[0u];
+ const QuicksortObject x_771 = obj;
+ const tint_array_wrapper tint_symbol_56 = {{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.arr[0u];
+ obj.numbers.arr[0u] = 0;
+ obj.numbers.arr[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 tint_array_wrapper tint_symbol_58 = {{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 tint_array_wrapper tint_symbol_60 = {{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.arr[0u];
+ obj.numbers.arr[0u] = 0;
+ obj.numbers.arr[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.arr[1];
+ const QuicksortObject x_783 = obj;
+ const tint_array_wrapper tint_symbol_62 = {{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 tint_array_wrapper tint_symbol_64 = {{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.arr[0u];
+ obj.numbers.arr[0u] = 0;
+ obj.numbers.arr[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.arr[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.arr[2u];
+ obj.numbers.arr[2u] = 0;
+ obj.numbers.arr[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.arr[2u];
+ obj.numbers.arr[2u] = 0;
+ obj.numbers.arr[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.arr[3];
+ const float x_816 = color.x;
+ color.x = 0.0f;
+ color.x = x_816;
+ const QuicksortObject x_817 = obj;
+ const tint_array_wrapper tint_symbol_66 = {{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.arr[0u];
+ obj.numbers.arr[0u] = 0;
+ obj.numbers.arr[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.arr[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.arr[4];
+ obj.numbers.arr[4] = 0;
+ obj.numbers.arr[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.arr[0u];
+ obj.numbers.arr[0u] = 0;
+ obj.numbers.arr[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.arr[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 tint_array_wrapper tint_symbol_68 = {{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.arr[4];
+ obj.numbers.arr[4] = 0;
+ obj.numbers.arr[4] = x_852;
+ const float x_274 = uv.y;
+ const int x_853 = obj.numbers.arr[0u];
+ obj.numbers.arr[0u] = 0;
+ obj.numbers.arr[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.arr[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.arr[4];
+ obj.numbers.arr[4] = 0;
+ obj.numbers.arr[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.arr[6u];
+ obj.numbers.arr[6u] = 0;
+ obj.numbers.arr[6u] = x_862;
+ const int x_863 = obj.numbers.arr[6u];
+ obj.numbers.arr[6u] = 0;
+ obj.numbers.arr[6u] = x_863;
+ const float2 x_490 = float2(x_480.z, x_480.z);
+ const QuicksortObject x_864 = obj;
+ const tint_array_wrapper tint_symbol_70 = {{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 tint_array_wrapper tint_symbol_72 = {{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.arr[4];
+ obj.numbers.arr[4] = 0;
+ obj.numbers.arr[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.arr[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.arr[0u];
+ obj.numbers.arr[0u] = 0;
+ obj.numbers.arr[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.arr[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.arr[8];
+ obj.numbers.arr[8] = 0;
+ obj.numbers.arr[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.arr[4];
+ obj.numbers.arr[4] = 0;
+ obj.numbers.arr[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.arr[4];
+ obj.numbers.arr[4] = 0;
+ obj.numbers.arr[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 tint_array_wrapper tint_symbol_74 = {{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.arr[8];
+ obj.numbers.arr[8] = 0;
+ obj.numbers.arr[8] = x_912;
+ const int x_317 = obj.numbers.arr[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 tint_array_wrapper tint_symbol_76 = {{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 tint_array_wrapper tint_symbol_78 = {{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 tint_array_wrapper tint_symbol_80 = {{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;
+};
+struct tint_symbol_1 {
+ float4 gl_FragCoord_param : SV_Position;
+};
+struct tint_symbol_2 {
+ float4 x_GLF_color : SV_Target0;
+};
+
+tint_symbol_2 main(tint_symbol_1 tint_symbol) {
+ const float4 gl_FragCoord_param = tint_symbol.gl_FragCoord_param;
+ gl_FragCoord = gl_FragCoord_param;
+ main_1();
+ const main_out tint_symbol_3 = {x_GLF_color};
+ const tint_symbol_2 tint_symbol_82 = {tint_symbol_3.x_GLF_color};
+ return tint_symbol_82;
+}
diff --git a/test/bug/tint/749.spvasm.expected.spvasm b/test/bug/tint/749.spvasm.expected.spvasm
index 60219a5..1ad4312 100644
--- a/test/bug/tint/749.spvasm.expected.spvasm
+++ b/test/bug/tint/749.spvasm.expected.spvasm
@@ -1,12 +1,12 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 1817
+; Bound: 1833
; Schema: 0
OpCapability Shader
- %1691 = OpExtInstImport "GLSL.std.450"
+ %1694 = OpExtInstImport "GLSL.std.450"
OpMemoryModel Logical GLSL450
- OpEntryPoint Fragment %main "main" %gl_FragCoord %x_GLF_color
+ OpEntryPoint Fragment %main "main" %tint_symbol %tint_symbol_2
OpExecutionMode %main OriginUpperLeft
OpName %QuicksortObject "QuicksortObject"
OpMemberName %QuicksortObject 0 "numbers"
@@ -16,6 +16,8 @@
OpMemberName %buf0 0 "resolution"
OpName %x_188 "x_188"
OpName %x_GLF_color "x_GLF_color"
+ OpName %tint_symbol "tint_symbol"
+ OpName %tint_symbol_2 "tint_symbol_2"
OpName %swap_i1_i1_ "swap_i1_i1_"
OpName %i "i"
OpName %j "j"
@@ -40,19 +42,25 @@
OpName %top "top"
OpName %stack "stack"
OpName %param_5 "param_5"
- OpName %main "main"
+ OpName %main_1 "main_1"
OpName %color "color"
OpName %i_2 "i_2"
OpName %uv "uv"
+ OpName %main_out "main_out"
+ OpMemberName %main_out 0 "x_GLF_color"
+ OpName %tint_symbol_3 "tint_symbol_3"
+ OpName %tint_symbol_1 "tint_symbol_1"
+ OpName %main "main"
OpMemberDecorate %QuicksortObject 0 Offset 0
OpDecorate %_arr_int_uint_10 ArrayStride 4
- OpDecorate %gl_FragCoord BuiltIn FragCoord
OpDecorate %buf0 Block
OpMemberDecorate %buf0 0 Offset 0
OpDecorate %x_188 NonWritable
OpDecorate %x_188 DescriptorSet 0
OpDecorate %x_188 Binding 0
- OpDecorate %x_GLF_color Location 0
+ OpDecorate %tint_symbol BuiltIn FragCoord
+ OpDecorate %tint_symbol_2 Location 0
+ OpMemberDecorate %main_out 0 Offset 0
%int = OpTypeInt 32 1
%uint = OpTypeInt 32 0
%uint_10 = OpConstant %uint 10
@@ -63,48 +71,51 @@
%obj = OpVariable %_ptr_Private_QuicksortObject Private %8
%float = OpTypeFloat 32
%v4float = OpTypeVector %float 4
-%_ptr_Input_v4float = OpTypePointer Input %v4float
-%gl_FragCoord = OpVariable %_ptr_Input_v4float Input
+%_ptr_Private_v4float = OpTypePointer Private %v4float
+ %13 = OpConstantNull %v4float
+%gl_FragCoord = OpVariable %_ptr_Private_v4float Private %13
%v2float = OpTypeVector %float 2
%buf0 = OpTypeStruct %v2float
%_ptr_Uniform_buf0 = OpTypePointer Uniform %buf0
%x_188 = OpVariable %_ptr_Uniform_buf0 Uniform
+%x_GLF_color = OpVariable %_ptr_Private_v4float Private %13
+%_ptr_Input_v4float = OpTypePointer Input %v4float
+%tint_symbol = OpVariable %_ptr_Input_v4float Input
%_ptr_Output_v4float = OpTypePointer Output %v4float
- %19 = OpConstantNull %v4float
-%x_GLF_color = OpVariable %_ptr_Output_v4float Output %19
+%tint_symbol_2 = OpVariable %_ptr_Output_v4float Output %13
%void = OpTypeVoid
%_ptr_Function_int = OpTypePointer Function %int
- %20 = OpTypeFunction %void %_ptr_Function_int %_ptr_Function_int
- %28 = OpConstantNull %int
+ %23 = OpTypeFunction %void %_ptr_Function_int %_ptr_Function_int
+ %31 = OpConstantNull %int
%int_0 = OpConstant %int 0
%v3float = OpTypeVector %float 3
%float_1 = OpConstant %float 1
%float_2 = OpConstant %float 2
%float_3 = OpConstant %float 3
- %35 = OpConstantComposite %v3float %float_1 %float_2 %float_3
+ %38 = OpConstantComposite %v3float %float_1 %float_2 %float_3
%uint_0 = OpConstant %uint 0
%_ptr_Private_int = OpTypePointer Private %int
- %99 = OpConstantComposite %_arr_int_uint_10 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0
- %100 = OpConstantComposite %QuicksortObject %99
- %151 = OpTypeFunction %int %_ptr_Function_int %_ptr_Function_int
+ %102 = OpConstantComposite %_arr_int_uint_10 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0 %int_0
+ %103 = OpConstantComposite %QuicksortObject %102
+ %154 = OpTypeFunction %int %_ptr_Function_int %_ptr_Function_int
%_ptr_Function_v2float = OpTypePointer Function %v2float
- %165 = OpConstantNull %v2float
+ %168 = OpConstantNull %v2float
%_ptr_Function_v3float = OpTypePointer Function %v3float
- %168 = OpConstantNull %v3float
+ %171 = OpConstantNull %v3float
%uint_1 = OpConstant %uint 1
%int_10 = OpConstant %int 10
%_ptr_Function_float = OpTypePointer Function %float
%bool = OpTypeBool
%int_1 = OpConstant %int 1
- %416 = OpTypeFunction %void
+ %419 = OpTypeFunction %void
%_ptr_Function__arr_int_uint_10 = OpTypePointer Function %_arr_int_uint_10
- %426 = OpConstantNull %_arr_int_uint_10
+ %429 = OpConstantNull %_arr_int_uint_10
%int_9 = OpConstant %int 9
%int_n1 = OpConstant %int -1
%float_0 = OpConstant %float 0
- %873 = OpConstantComposite %v2float %float_0 %float_0
+ %876 = OpConstantComposite %v2float %float_0 %float_0
%true = OpConstantTrue %bool
- %885 = OpConstantComposite %v3float %float_0 %float_0 %float_0
+ %888 = OpConstantComposite %v3float %float_0 %float_0 %float_0
%_ptr_Uniform_v2float = OpTypePointer Uniform %v2float
%float_0_25 = OpConstant %float 0.25
%float_0_5 = OpConstant %float 0.5
@@ -117,2497 +128,2516 @@
%int_7 = OpConstant %int 7
%int_8 = OpConstant %int 8
%uint_9 = OpConstant %uint 9
-%swap_i1_i1_ = OpFunction %void None %20
+ %main_out = OpTypeStruct %v4float
+ %1820 = OpTypeFunction %void %main_out
+%swap_i1_i1_ = OpFunction %void None %23
%i = OpFunctionParameter %_ptr_Function_int
%j = OpFunctionParameter %_ptr_Function_int
- %26 = OpLabel
- %temp = OpVariable %_ptr_Function_int Function %28
- %29 = OpLoad %int %temp
+ %29 = OpLabel
+ %temp = OpVariable %_ptr_Function_int Function %31
+ %32 = OpLoad %int %temp
OpStore %temp %int_0
- OpStore %temp %29
- %36 = OpCompositeExtract %float %35 2
- %37 = OpCompositeExtract %float %35 1
- %38 = OpCompositeExtract %float %35 2
- %39 = OpCompositeConstruct %v3float %36 %37 %38
- %41 = OpLoad %int %i
+ OpStore %temp %32
+ %39 = OpCompositeExtract %float %38 2
+ %40 = OpCompositeExtract %float %38 1
+ %41 = OpCompositeExtract %float %38 2
+ %42 = OpCompositeConstruct %v3float %39 %40 %41
+ %44 = OpLoad %int %i
OpStore %i %int_0
- OpStore %i %41
- %45 = OpLoad %int %i
- %47 = OpLoad %int %j
+ OpStore %i %44
+ %48 = OpLoad %int %i
+ %50 = OpLoad %int %j
OpStore %j %int_0
- OpStore %j %47
- %50 = OpCompositeExtract %float %39 1
- %51 = OpCompositeExtract %float %39 0
- %52 = OpCompositeExtract %float %39 1
- %53 = OpCompositeConstruct %v3float %50 %51 %52
- %54 = OpLoad %int %temp
+ OpStore %j %50
+ %53 = OpCompositeExtract %float %42 1
+ %54 = OpCompositeExtract %float %42 0
+ %55 = OpCompositeExtract %float %42 1
+ %56 = OpCompositeConstruct %v3float %53 %54 %55
+ %57 = OpLoad %int %temp
OpStore %temp %int_0
- OpStore %temp %54
- %57 = OpAccessChain %_ptr_Private_int %obj %uint_0 %45
- %58 = OpLoad %int %57
- %59 = OpAccessChain %_ptr_Private_int %obj %uint_0 %45
- OpStore %59 %int_0
- %60 = OpAccessChain %_ptr_Private_int %obj %uint_0 %45
- OpStore %60 %58
- %61 = OpAccessChain %_ptr_Private_int %obj %uint_0 %45
- %62 = OpLoad %int %61
- %63 = OpLoad %int %temp
+ OpStore %temp %57
+ %60 = OpAccessChain %_ptr_Private_int %obj %uint_0 %48
+ %61 = OpLoad %int %60
+ %62 = OpAccessChain %_ptr_Private_int %obj %uint_0 %48
+ OpStore %62 %int_0
+ %63 = OpAccessChain %_ptr_Private_int %obj %uint_0 %48
+ OpStore %63 %61
+ %64 = OpAccessChain %_ptr_Private_int %obj %uint_0 %48
+ %65 = OpLoad %int %64
+ %66 = OpLoad %int %temp
OpStore %temp %int_0
- OpStore %temp %63
- OpStore %temp %62
- %65 = OpLoad %int %j
+ OpStore %temp %66
+ OpStore %temp %65
+ %68 = OpLoad %int %j
OpStore %j %int_0
- OpStore %j %65
- %68 = OpCompositeExtract %float %39 2
- %69 = OpCompositeExtract %float %35 0
- %70 = OpCompositeExtract %float %39 1
- %71 = OpCompositeConstruct %v3float %68 %69 %70
- %73 = OpLoad %int %i
+ OpStore %j %68
+ %71 = OpCompositeExtract %float %42 2
+ %72 = OpCompositeExtract %float %38 0
+ %73 = OpCompositeExtract %float %42 1
+ %74 = OpCompositeConstruct %v3float %71 %72 %73
+ %76 = OpLoad %int %i
OpStore %i %int_0
- OpStore %i %73
- %77 = OpLoad %int %i
- %78 = OpAccessChain %_ptr_Private_int %obj %uint_0 %45
- %79 = OpLoad %int %78
- %80 = OpAccessChain %_ptr_Private_int %obj %uint_0 %45
- OpStore %80 %int_0
- %81 = OpAccessChain %_ptr_Private_int %obj %uint_0 %45
- OpStore %81 %79
- %83 = OpLoad %int %j
- %85 = OpLoad %int %i
+ OpStore %i %76
+ %80 = OpLoad %int %i
+ %81 = OpAccessChain %_ptr_Private_int %obj %uint_0 %48
+ %82 = OpLoad %int %81
+ %83 = OpAccessChain %_ptr_Private_int %obj %uint_0 %48
+ OpStore %83 %int_0
+ %84 = OpAccessChain %_ptr_Private_int %obj %uint_0 %48
+ OpStore %84 %82
+ %86 = OpLoad %int %j
+ %88 = OpLoad %int %i
OpStore %i %int_0
- OpStore %i %85
- %88 = OpCompositeExtract %float %71 0
- %89 = OpCompositeExtract %float %71 2
- %90 = OpCompositeExtract %float %71 2
- %91 = OpCompositeConstruct %v3float %88 %89 %90
- %92 = OpAccessChain %_ptr_Private_int %obj %uint_0 %45
- %93 = OpLoad %int %92
- %94 = OpAccessChain %_ptr_Private_int %obj %uint_0 %45
- OpStore %94 %int_0
- %95 = OpAccessChain %_ptr_Private_int %obj %uint_0 %45
- OpStore %95 %93
- %96 = OpAccessChain %_ptr_Private_int %obj %uint_0 %83
- %97 = OpLoad %int %96
- %98 = OpLoad %QuicksortObject %obj
- OpStore %obj %100
- OpStore %obj %98
- %101 = OpCompositeExtract %float %91 0
- %102 = OpCompositeExtract %float %91 0
- %103 = OpCompositeConstruct %v2float %101 %102
- %104 = OpCompositeExtract %float %53 0
- %105 = OpCompositeExtract %float %53 2
- %106 = OpCompositeExtract %float %53 0
- %107 = OpCompositeConstruct %v3float %104 %105 %106
- %108 = OpAccessChain %_ptr_Private_int %obj %uint_0 %77
- OpStore %108 %97
- %109 = OpLoad %QuicksortObject %obj
- OpStore %obj %100
- OpStore %obj %109
- %110 = OpCompositeExtract %float %91 1
- %111 = OpCompositeExtract %float %91 2
- %112 = OpCompositeExtract %float %91 0
- %113 = OpCompositeConstruct %v3float %110 %111 %112
- %115 = OpLoad %int %i
+ OpStore %i %88
+ %91 = OpCompositeExtract %float %74 0
+ %92 = OpCompositeExtract %float %74 2
+ %93 = OpCompositeExtract %float %74 2
+ %94 = OpCompositeConstruct %v3float %91 %92 %93
+ %95 = OpAccessChain %_ptr_Private_int %obj %uint_0 %48
+ %96 = OpLoad %int %95
+ %97 = OpAccessChain %_ptr_Private_int %obj %uint_0 %48
+ OpStore %97 %int_0
+ %98 = OpAccessChain %_ptr_Private_int %obj %uint_0 %48
+ OpStore %98 %96
+ %99 = OpAccessChain %_ptr_Private_int %obj %uint_0 %86
+ %100 = OpLoad %int %99
+ %101 = OpLoad %QuicksortObject %obj
+ OpStore %obj %103
+ OpStore %obj %101
+ %104 = OpCompositeExtract %float %94 0
+ %105 = OpCompositeExtract %float %94 0
+ %106 = OpCompositeConstruct %v2float %104 %105
+ %107 = OpCompositeExtract %float %56 0
+ %108 = OpCompositeExtract %float %56 2
+ %109 = OpCompositeExtract %float %56 0
+ %110 = OpCompositeConstruct %v3float %107 %108 %109
+ %111 = OpAccessChain %_ptr_Private_int %obj %uint_0 %80
+ OpStore %111 %100
+ %112 = OpLoad %QuicksortObject %obj
+ OpStore %obj %103
+ OpStore %obj %112
+ %113 = OpCompositeExtract %float %94 1
+ %114 = OpCompositeExtract %float %94 2
+ %115 = OpCompositeExtract %float %94 0
+ %116 = OpCompositeConstruct %v3float %113 %114 %115
+ %118 = OpLoad %int %i
OpStore %i %int_0
- OpStore %i %115
- %119 = OpLoad %int %j
- %120 = OpLoad %int %temp
+ OpStore %i %118
+ %122 = OpLoad %int %j
+ %123 = OpLoad %int %temp
OpStore %temp %int_0
- OpStore %temp %120
- %121 = OpCompositeExtract %float %113 2
- %122 = OpCompositeExtract %float %113 1
- %123 = OpCompositeConstruct %v2float %121 %122
- %124 = OpAccessChain %_ptr_Private_int %obj %uint_0 %83
- %125 = OpLoad %int %124
- %126 = OpAccessChain %_ptr_Private_int %obj %uint_0 %83
- OpStore %126 %int_0
- %127 = OpAccessChain %_ptr_Private_int %obj %uint_0 %83
- OpStore %127 %125
- %128 = OpLoad %int %temp
- %130 = OpLoad %int %j
+ OpStore %temp %123
+ %124 = OpCompositeExtract %float %116 2
+ %125 = OpCompositeExtract %float %116 1
+ %126 = OpCompositeConstruct %v2float %124 %125
+ %127 = OpAccessChain %_ptr_Private_int %obj %uint_0 %86
+ %128 = OpLoad %int %127
+ %129 = OpAccessChain %_ptr_Private_int %obj %uint_0 %86
+ OpStore %129 %int_0
+ %130 = OpAccessChain %_ptr_Private_int %obj %uint_0 %86
+ OpStore %130 %128
+ %131 = OpLoad %int %temp
+ %133 = OpLoad %int %j
OpStore %j %int_0
- OpStore %j %130
- %133 = OpCompositeExtract %float %103 0
- %134 = OpCompositeExtract %float %91 1
- %135 = OpCompositeExtract %float %91 0
- %136 = OpCompositeConstruct %v3float %133 %134 %135
- %137 = OpAccessChain %_ptr_Private_int %obj %uint_0 %77
- %138 = OpLoad %int %137
- %139 = OpAccessChain %_ptr_Private_int %obj %uint_0 %77
- OpStore %139 %int_0
- %140 = OpAccessChain %_ptr_Private_int %obj %uint_0 %77
- OpStore %140 %138
- %141 = OpLoad %QuicksortObject %obj
- OpStore %obj %100
- OpStore %obj %141
- %142 = OpCompositeExtract %float %107 0
- %143 = OpCompositeExtract %float %107 1
- %144 = OpCompositeExtract %float %107 0
- %145 = OpCompositeConstruct %v3float %142 %143 %144
- %146 = OpAccessChain %_ptr_Private_int %obj %uint_0 %83
- %147 = OpLoad %int %146
- %148 = OpAccessChain %_ptr_Private_int %obj %uint_0 %83
- OpStore %148 %int_0
- %149 = OpAccessChain %_ptr_Private_int %obj %uint_0 %83
- OpStore %149 %147
- %150 = OpAccessChain %_ptr_Private_int %obj %uint_0 %119
- OpStore %150 %128
+ OpStore %j %133
+ %136 = OpCompositeExtract %float %106 0
+ %137 = OpCompositeExtract %float %94 1
+ %138 = OpCompositeExtract %float %94 0
+ %139 = OpCompositeConstruct %v3float %136 %137 %138
+ %140 = OpAccessChain %_ptr_Private_int %obj %uint_0 %80
+ %141 = OpLoad %int %140
+ %142 = OpAccessChain %_ptr_Private_int %obj %uint_0 %80
+ OpStore %142 %int_0
+ %143 = OpAccessChain %_ptr_Private_int %obj %uint_0 %80
+ OpStore %143 %141
+ %144 = OpLoad %QuicksortObject %obj
+ OpStore %obj %103
+ OpStore %obj %144
+ %145 = OpCompositeExtract %float %110 0
+ %146 = OpCompositeExtract %float %110 1
+ %147 = OpCompositeExtract %float %110 0
+ %148 = OpCompositeConstruct %v3float %145 %146 %147
+ %149 = OpAccessChain %_ptr_Private_int %obj %uint_0 %86
+ %150 = OpLoad %int %149
+ %151 = OpAccessChain %_ptr_Private_int %obj %uint_0 %86
+ OpStore %151 %int_0
+ %152 = OpAccessChain %_ptr_Private_int %obj %uint_0 %86
+ OpStore %152 %150
+ %153 = OpAccessChain %_ptr_Private_int %obj %uint_0 %122
+ OpStore %153 %131
OpReturn
OpFunctionEnd
-%performPartition_i1_i1_ = OpFunction %int None %151
+%performPartition_i1_i1_ = OpFunction %int None %154
%l = OpFunctionParameter %_ptr_Function_int
%h = OpFunctionParameter %_ptr_Function_int
- %155 = OpLabel
- %param_3 = OpVariable %_ptr_Function_int Function %28
- %i_1 = OpVariable %_ptr_Function_int Function %28
- %j_1 = OpVariable %_ptr_Function_int Function %28
- %param_2 = OpVariable %_ptr_Function_int Function %28
- %param_1 = OpVariable %_ptr_Function_int Function %28
- %param = OpVariable %_ptr_Function_int Function %28
- %pivot = OpVariable %_ptr_Function_int Function %28
- %x_537 = OpVariable %_ptr_Function_v2float Function %165
- %x_538 = OpVariable %_ptr_Function_v3float Function %168
- %170 = OpLoad %int %h
+ %158 = OpLabel
+ %param_3 = OpVariable %_ptr_Function_int Function %31
+ %i_1 = OpVariable %_ptr_Function_int Function %31
+ %j_1 = OpVariable %_ptr_Function_int Function %31
+ %param_2 = OpVariable %_ptr_Function_int Function %31
+ %param_1 = OpVariable %_ptr_Function_int Function %31
+ %param = OpVariable %_ptr_Function_int Function %31
+ %pivot = OpVariable %_ptr_Function_int Function %31
+ %x_537 = OpVariable %_ptr_Function_v2float Function %168
+ %x_538 = OpVariable %_ptr_Function_v3float Function %171
+ %173 = OpLoad %int %h
OpStore %h %int_0
- OpStore %h %170
- %174 = OpLoad %int %h
- %176 = OpLoad %int %l
+ OpStore %h %173
+ %177 = OpLoad %int %h
+ %179 = OpLoad %int %l
OpStore %l %int_0
- OpStore %l %176
- %179 = OpAccessChain %_ptr_Private_int %obj %uint_0 %174
- %180 = OpLoad %int %179
- %181 = OpAccessChain %_ptr_Private_int %obj %uint_0 %174
- OpStore %181 %int_0
- %182 = OpAccessChain %_ptr_Private_int %obj %uint_0 %174
- OpStore %182 %180
- %183 = OpAccessChain %_ptr_Private_int %obj %uint_0 %174
- %184 = OpLoad %int %183
- %185 = OpLoad %int %param_3
+ OpStore %l %179
+ %182 = OpAccessChain %_ptr_Private_int %obj %uint_0 %177
+ %183 = OpLoad %int %182
+ %184 = OpAccessChain %_ptr_Private_int %obj %uint_0 %177
+ OpStore %184 %int_0
+ %185 = OpAccessChain %_ptr_Private_int %obj %uint_0 %177
+ OpStore %185 %183
+ %186 = OpAccessChain %_ptr_Private_int %obj %uint_0 %177
+ %187 = OpLoad %int %186
+ %188 = OpLoad %int %param_3
OpStore %param_3 %int_0
- OpStore %param_3 %185
- %186 = OpCompositeExtract %float %35 2
- %187 = OpCompositeExtract %float %35 0
- %188 = OpCompositeExtract %float %35 2
- %189 = OpCompositeConstruct %v3float %186 %187 %188
- %190 = OpLoad %int %param_1
+ OpStore %param_3 %188
+ %189 = OpCompositeExtract %float %38 2
+ %190 = OpCompositeExtract %float %38 0
+ %191 = OpCompositeExtract %float %38 2
+ %192 = OpCompositeConstruct %v3float %189 %190 %191
+ %193 = OpLoad %int %param_1
OpStore %param_1 %int_0
- OpStore %param_1 %190
- OpStore %pivot %184
- %192 = OpLoad %int %l
- %194 = OpLoad %int %h
+ OpStore %param_1 %193
+ OpStore %pivot %187
+ %195 = OpLoad %int %l
+ %197 = OpLoad %int %h
OpStore %h %int_0
- OpStore %h %194
- %197 = OpLoad %int %j_1
+ OpStore %h %197
+ %200 = OpLoad %int %j_1
OpStore %j_1 %int_0
- OpStore %j_1 %197
- %198 = OpCompositeExtract %float %189 1
- %199 = OpCompositeExtract %float %189 2
- %200 = OpCompositeExtract %float %189 1
- %201 = OpCompositeConstruct %v3float %198 %199 %200
- %203 = OpLoad %int %l
+ OpStore %j_1 %200
+ %201 = OpCompositeExtract %float %192 1
+ %202 = OpCompositeExtract %float %192 2
+ %203 = OpCompositeExtract %float %192 1
+ %204 = OpCompositeConstruct %v3float %201 %202 %203
+ %206 = OpLoad %int %l
OpStore %l %int_0
- OpStore %l %203
- %206 = OpBitcast %int %uint_1
- %208 = OpISub %int %192 %206
- OpStore %i_1 %208
- %210 = OpLoad %int %l
- %211 = OpCompositeExtract %float %189 0
- %212 = OpCompositeExtract %float %189 2
- %213 = OpCompositeExtract %float %201 0
- %214 = OpCompositeConstruct %v3float %211 %212 %213
+ OpStore %l %206
+ %209 = OpBitcast %int %uint_1
+ %211 = OpISub %int %195 %209
+ OpStore %i_1 %211
+ %213 = OpLoad %int %l
+ %214 = OpCompositeExtract %float %192 0
+ %215 = OpCompositeExtract %float %192 2
+ %216 = OpCompositeExtract %float %204 0
+ %217 = OpCompositeConstruct %v3float %214 %215 %216
OpStore %j_1 %int_10
- %216 = OpLoad %QuicksortObject %obj
- OpStore %obj %100
- OpStore %obj %216
- OpBranch %217
- %217 = OpLabel
- OpLoopMerge %218 %219 None
+ %219 = OpLoad %QuicksortObject %obj
+ OpStore %obj %103
+ OpStore %obj %219
OpBranch %220
%220 = OpLabel
- %221 = OpLoad %int %pivot
- OpStore %pivot %int_0
- OpStore %pivot %221
- %222 = OpLoad %int %param_1
- OpStore %param_1 %int_0
- OpStore %param_1 %222
- %223 = OpLoad %int %j_1
+ OpLoopMerge %221 %222 None
+ OpBranch %223
+ %223 = OpLabel
%224 = OpLoad %int %pivot
OpStore %pivot %int_0
OpStore %pivot %224
- %225 = OpCompositeExtract %float %35 1
- %226 = OpCompositeExtract %float %35 2
- %227 = OpCompositeConstruct %v2float %225 %226
- OpStore %x_537 %227
- %228 = OpLoad %QuicksortObject %obj
- OpStore %obj %100
- OpStore %obj %228
- %230 = OpLoad %int %h
- %232 = OpLoad %int %h
+ %225 = OpLoad %int %param_1
+ OpStore %param_1 %int_0
+ OpStore %param_1 %225
+ %226 = OpLoad %int %j_1
+ %227 = OpLoad %int %pivot
+ OpStore %pivot %int_0
+ OpStore %pivot %227
+ %228 = OpCompositeExtract %float %38 1
+ %229 = OpCompositeExtract %float %38 2
+ %230 = OpCompositeConstruct %v2float %228 %229
+ OpStore %x_537 %230
+ %231 = OpLoad %QuicksortObject %obj
+ OpStore %obj %103
+ OpStore %obj %231
+ %233 = OpLoad %int %h
+ %235 = OpLoad %int %h
OpStore %h %int_0
- OpStore %h %232
- %235 = OpLoad %int %param
+ OpStore %h %235
+ %238 = OpLoad %int %param
OpStore %param %int_0
- OpStore %param %235
- %236 = OpLoad %int %j_1
+ OpStore %param %238
+ %239 = OpLoad %int %j_1
OpStore %j_1 %int_0
- OpStore %j_1 %236
- %237 = OpCompositeExtract %float %189 0
- %239 = OpAccessChain %_ptr_Function_float %x_537 %uint_1
- %240 = OpLoad %float %239
- %241 = OpCompositeExtract %float %189 2
- %242 = OpCompositeConstruct %v3float %237 %240 %241
- OpStore %x_538 %242
- %243 = OpLoad %int %param
+ OpStore %j_1 %239
+ %240 = OpCompositeExtract %float %192 0
+ %242 = OpAccessChain %_ptr_Function_float %x_537 %uint_1
+ %243 = OpLoad %float %242
+ %244 = OpCompositeExtract %float %192 2
+ %245 = OpCompositeConstruct %v3float %240 %243 %244
+ OpStore %x_538 %245
+ %246 = OpLoad %int %param
OpStore %param %int_0
- OpStore %param %243
- %244 = OpBitcast %int %uint_1
- %245 = OpISub %int %230 %244
- %246 = OpSLessThanEqual %bool %223 %245
- OpSelectionMerge %248 None
- OpBranchConditional %246 %249 %250
- %249 = OpLabel
- OpBranch %248
- %250 = OpLabel
- OpBranch %218
- %248 = OpLabel
- %251 = OpLoad %int %j_1
- %252 = OpAccessChain %_ptr_Private_int %obj %uint_0 %174
- %253 = OpLoad %int %252
- %254 = OpAccessChain %_ptr_Private_int %obj %uint_0 %174
- OpStore %254 %int_0
- %255 = OpAccessChain %_ptr_Private_int %obj %uint_0 %174
- OpStore %255 %253
- %257 = OpLoad %int %h
+ OpStore %param %246
+ %247 = OpBitcast %int %uint_1
+ %248 = OpISub %int %233 %247
+ %249 = OpSLessThanEqual %bool %226 %248
+ OpSelectionMerge %251 None
+ OpBranchConditional %249 %252 %253
+ %252 = OpLabel
+ OpBranch %251
+ %253 = OpLabel
+ OpBranch %221
+ %251 = OpLabel
+ %254 = OpLoad %int %j_1
+ %255 = OpAccessChain %_ptr_Private_int %obj %uint_0 %177
+ %256 = OpLoad %int %255
+ %257 = OpAccessChain %_ptr_Private_int %obj %uint_0 %177
+ OpStore %257 %int_0
+ %258 = OpAccessChain %_ptr_Private_int %obj %uint_0 %177
+ OpStore %258 %256
+ %260 = OpLoad %int %h
OpStore %h %int_0
- OpStore %h %257
- %260 = OpAccessChain %_ptr_Function_float %x_537 %uint_0
- %261 = OpLoad %float %260
- %262 = OpCompositeExtract %float %201 2
+ OpStore %h %260
%263 = OpAccessChain %_ptr_Function_float %x_537 %uint_0
%264 = OpLoad %float %263
- %265 = OpCompositeConstruct %v3float %261 %262 %264
- %266 = OpLoad %int %param_1
+ %265 = OpCompositeExtract %float %204 2
+ %266 = OpAccessChain %_ptr_Function_float %x_537 %uint_0
+ %267 = OpLoad %float %266
+ %268 = OpCompositeConstruct %v3float %264 %265 %267
+ %269 = OpLoad %int %param_1
OpStore %param_1 %int_0
- OpStore %param_1 %266
- %267 = OpAccessChain %_ptr_Private_int %obj %uint_0 %251
- %268 = OpLoad %int %267
- %269 = OpLoad %QuicksortObject %obj
- OpStore %obj %100
- OpStore %obj %269
- %270 = OpLoad %int %pivot
- %271 = OpCompositeExtract %float %35 1
- %272 = OpCompositeExtract %float %189 2
- %273 = OpCompositeConstruct %v2float %271 %272
- %274 = OpLoad %int %i_1
+ OpStore %param_1 %269
+ %270 = OpAccessChain %_ptr_Private_int %obj %uint_0 %254
+ %271 = OpLoad %int %270
+ %272 = OpLoad %QuicksortObject %obj
+ OpStore %obj %103
+ OpStore %obj %272
+ %273 = OpLoad %int %pivot
+ %274 = OpCompositeExtract %float %38 1
+ %275 = OpCompositeExtract %float %192 2
+ %276 = OpCompositeConstruct %v2float %274 %275
+ %277 = OpLoad %int %i_1
OpStore %i_1 %int_0
- OpStore %i_1 %274
- %276 = OpLoad %int %l
+ OpStore %i_1 %277
+ %279 = OpLoad %int %l
OpStore %l %int_0
- OpStore %l %276
- %279 = OpCompositeExtract %float %189 1
- %280 = OpCompositeExtract %float %189 0
- %281 = OpCompositeExtract %float %189 1
- %282 = OpCompositeConstruct %v3float %279 %280 %281
- %283 = OpLoad %int %pivot
+ OpStore %l %279
+ %282 = OpCompositeExtract %float %192 1
+ %283 = OpCompositeExtract %float %192 0
+ %284 = OpCompositeExtract %float %192 1
+ %285 = OpCompositeConstruct %v3float %282 %283 %284
+ %286 = OpLoad %int %pivot
OpStore %pivot %int_0
- OpStore %pivot %283
- %284 = OpSLessThanEqual %bool %268 %270
- OpSelectionMerge %285 None
- OpBranchConditional %284 %286 %285
- %286 = OpLabel
- %287 = OpCompositeExtract %float %282 2
- %288 = OpCompositeExtract %float %282 0
- %289 = OpCompositeExtract %float %282 0
- %290 = OpCompositeConstruct %v3float %287 %288 %289
- %291 = OpLoad %int %param_3
+ OpStore %pivot %286
+ %287 = OpSLessThanEqual %bool %271 %273
+ OpSelectionMerge %288 None
+ OpBranchConditional %287 %289 %288
+ %289 = OpLabel
+ %290 = OpCompositeExtract %float %285 2
+ %291 = OpCompositeExtract %float %285 0
+ %292 = OpCompositeExtract %float %285 0
+ %293 = OpCompositeConstruct %v3float %290 %291 %292
+ %294 = OpLoad %int %param_3
OpStore %param_3 %int_0
- OpStore %param_3 %291
- %292 = OpLoad %int %i_1
- %293 = OpLoad %int %pivot
+ OpStore %param_3 %294
+ %295 = OpLoad %int %i_1
+ %296 = OpLoad %int %pivot
OpStore %pivot %int_0
- OpStore %pivot %293
- %294 = OpCompositeExtract %float %265 0
- %295 = OpCompositeExtract %float %282 1
- %296 = OpCompositeConstruct %v2float %294 %295
- %297 = OpLoad %int %i_1
+ OpStore %pivot %296
+ %297 = OpCompositeExtract %float %268 0
+ %298 = OpCompositeExtract %float %285 1
+ %299 = OpCompositeConstruct %v2float %297 %298
+ %300 = OpLoad %int %i_1
OpStore %i_1 %int_0
- OpStore %i_1 %297
- %298 = OpLoad %int %param
- OpStore %param %int_0
- OpStore %param %298
- %299 = OpBitcast %int %uint_1
- %300 = OpIAdd %int %292 %299
OpStore %i_1 %300
- %302 = OpLoad %int %l
+ %301 = OpLoad %int %param
+ OpStore %param %int_0
+ OpStore %param %301
+ %302 = OpBitcast %int %uint_1
+ %303 = OpIAdd %int %295 %302
+ OpStore %i_1 %303
+ %305 = OpLoad %int %l
OpStore %l %int_0
- OpStore %l %302
- %305 = OpCompositeExtract %float %35 2
- %306 = OpCompositeExtract %float %35 1
- %307 = OpCompositeExtract %float %273 0
- %308 = OpCompositeConstruct %v3float %305 %306 %307
- %309 = OpLoad %int %i_1
- %310 = OpAccessChain %_ptr_Function_float %x_537 %uint_1
- %311 = OpLoad %float %310
- %312 = OpAccessChain %_ptr_Function_float %x_538 %uint_0
- %313 = OpLoad %float %312
- %314 = OpCompositeConstruct %v2float %311 %313
- %315 = OpLoad %int %param
+ OpStore %l %305
+ %308 = OpCompositeExtract %float %38 2
+ %309 = OpCompositeExtract %float %38 1
+ %310 = OpCompositeExtract %float %276 0
+ %311 = OpCompositeConstruct %v3float %308 %309 %310
+ %312 = OpLoad %int %i_1
+ %313 = OpAccessChain %_ptr_Function_float %x_537 %uint_1
+ %314 = OpLoad %float %313
+ %315 = OpAccessChain %_ptr_Function_float %x_538 %uint_0
+ %316 = OpLoad %float %315
+ %317 = OpCompositeConstruct %v2float %314 %316
+ %318 = OpLoad %int %param
OpStore %param %int_0
- OpStore %param %315
- OpStore %param %309
- %316 = OpLoad %int %param
+ OpStore %param %318
+ OpStore %param %312
+ %319 = OpLoad %int %param
OpStore %param %int_0
- OpStore %param %316
- %317 = OpCompositeExtract %float %314 0
- %318 = OpCompositeExtract %float %314 0
- %319 = OpCompositeConstruct %v2float %317 %318
- %320 = OpLoad %int %i_1
+ OpStore %param %319
+ %320 = OpCompositeExtract %float %317 0
+ %321 = OpCompositeExtract %float %317 0
+ %322 = OpCompositeConstruct %v2float %320 %321
+ %323 = OpLoad %int %i_1
OpStore %i_1 %int_0
- OpStore %i_1 %320
- %321 = OpLoad %int %j_1
- OpStore %param_1 %321
- %322 = OpLoad %int %param_3
+ OpStore %i_1 %323
+ %324 = OpLoad %int %j_1
+ OpStore %param_1 %324
+ %325 = OpLoad %int %param_3
OpStore %param_3 %int_0
- OpStore %param_3 %322
- %323 = OpFunctionCall %void %swap_i1_i1_ %param %param_1
- %326 = OpLoad %int %param_1
+ OpStore %param_3 %325
+ %326 = OpFunctionCall %void %swap_i1_i1_ %param %param_1
+ %329 = OpLoad %int %param_1
OpStore %param_1 %int_0
- OpStore %param_1 %326
- OpBranch %285
- %285 = OpLabel
- %327 = OpLoad %QuicksortObject %obj
- OpStore %obj %100
- OpStore %obj %327
- OpBranch %219
- %219 = OpLabel
- %329 = OpLoad %int %h
+ OpStore %param_1 %329
+ OpBranch %288
+ %288 = OpLabel
+ %330 = OpLoad %QuicksortObject %obj
+ OpStore %obj %103
+ OpStore %obj %330
+ OpBranch %222
+ %222 = OpLabel
+ %332 = OpLoad %int %h
OpStore %h %int_0
- OpStore %h %329
- %332 = OpLoad %int %j_1
- %334 = OpLoad %int %h
+ OpStore %h %332
+ %335 = OpLoad %int %j_1
+ %337 = OpLoad %int %h
OpStore %h %int_0
- OpStore %h %334
- %337 = OpCompositeExtract %float %265 0
- %338 = OpCompositeExtract %float %282 2
- %339 = OpCompositeExtract %float %282 2
- %340 = OpCompositeConstruct %v3float %337 %338 %339
- %341 = OpAccessChain %_ptr_Private_int %obj %uint_0 %251
- %342 = OpLoad %int %341
- %343 = OpAccessChain %_ptr_Private_int %obj %uint_0 %251
- OpStore %343 %int_0
- %344 = OpAccessChain %_ptr_Private_int %obj %uint_0 %251
- OpStore %344 %342
- %345 = OpLoad %int %param
+ OpStore %h %337
+ %340 = OpCompositeExtract %float %268 0
+ %341 = OpCompositeExtract %float %285 2
+ %342 = OpCompositeExtract %float %285 2
+ %343 = OpCompositeConstruct %v3float %340 %341 %342
+ %344 = OpAccessChain %_ptr_Private_int %obj %uint_0 %254
+ %345 = OpLoad %int %344
+ %346 = OpAccessChain %_ptr_Private_int %obj %uint_0 %254
+ OpStore %346 %int_0
+ %347 = OpAccessChain %_ptr_Private_int %obj %uint_0 %254
+ OpStore %347 %345
+ %348 = OpLoad %int %param
OpStore %param %int_0
- OpStore %param %345
- %347 = OpIAdd %int %int_1 %332
- OpStore %j_1 %347
- %348 = OpLoad %int %param_1
+ OpStore %param %348
+ %350 = OpIAdd %int %int_1 %335
+ OpStore %j_1 %350
+ %351 = OpLoad %int %param_1
OpStore %param_1 %int_0
- OpStore %param_1 %348
- %349 = OpCompositeExtract %float %282 1
- %350 = OpCompositeExtract %float %282 2
- %351 = OpCompositeExtract %float %282 0
- %352 = OpCompositeConstruct %v3float %349 %350 %351
- %353 = OpAccessChain %_ptr_Private_int %obj %uint_0 %251
- %354 = OpLoad %int %353
- %355 = OpAccessChain %_ptr_Private_int %obj %uint_0 %251
- OpStore %355 %int_0
- %356 = OpAccessChain %_ptr_Private_int %obj %uint_0 %251
- OpStore %356 %354
- OpBranch %217
- %218 = OpLabel
- %357 = OpLoad %int %i_1
- %358 = OpAccessChain %_ptr_Private_int %obj %uint_0 %174
- %359 = OpLoad %int %358
- %360 = OpAccessChain %_ptr_Private_int %obj %uint_0 %174
- OpStore %360 %int_0
- %361 = OpAccessChain %_ptr_Private_int %obj %uint_0 %174
- OpStore %361 %359
- %362 = OpCompositeExtract %float %189 0
- %363 = OpCompositeExtract %float %189 1
- %364 = OpCompositeConstruct %v2float %362 %363
- %365 = OpLoad %QuicksortObject %obj
- OpStore %obj %100
- OpStore %obj %365
- %367 = OpLoad %int %h
+ OpStore %param_1 %351
+ %352 = OpCompositeExtract %float %285 1
+ %353 = OpCompositeExtract %float %285 2
+ %354 = OpCompositeExtract %float %285 0
+ %355 = OpCompositeConstruct %v3float %352 %353 %354
+ %356 = OpAccessChain %_ptr_Private_int %obj %uint_0 %254
+ %357 = OpLoad %int %356
+ %358 = OpAccessChain %_ptr_Private_int %obj %uint_0 %254
+ OpStore %358 %int_0
+ %359 = OpAccessChain %_ptr_Private_int %obj %uint_0 %254
+ OpStore %359 %357
+ OpBranch %220
+ %221 = OpLabel
+ %360 = OpLoad %int %i_1
+ %361 = OpAccessChain %_ptr_Private_int %obj %uint_0 %177
+ %362 = OpLoad %int %361
+ %363 = OpAccessChain %_ptr_Private_int %obj %uint_0 %177
+ OpStore %363 %int_0
+ %364 = OpAccessChain %_ptr_Private_int %obj %uint_0 %177
+ OpStore %364 %362
+ %365 = OpCompositeExtract %float %192 0
+ %366 = OpCompositeExtract %float %192 1
+ %367 = OpCompositeConstruct %v2float %365 %366
+ %368 = OpLoad %QuicksortObject %obj
+ OpStore %obj %103
+ OpStore %obj %368
+ %370 = OpLoad %int %h
OpStore %h %int_0
- OpStore %h %367
- %370 = OpIAdd %int %int_1 %357
- OpStore %i_1 %370
- %371 = OpLoad %int %param_1
+ OpStore %h %370
+ %373 = OpIAdd %int %int_1 %360
+ OpStore %i_1 %373
+ %374 = OpLoad %int %param_1
OpStore %param_1 %int_0
- OpStore %param_1 %371
- %372 = OpLoad %int %i_1
- %373 = OpLoad %int %j_1
+ OpStore %param_1 %374
+ %375 = OpLoad %int %i_1
+ %376 = OpLoad %int %j_1
OpStore %j_1 %int_0
- OpStore %j_1 %373
- %374 = OpCompositeExtract %float %189 0
- %375 = OpCompositeExtract %float %189 0
- %376 = OpCompositeConstruct %v2float %374 %375
- %377 = OpLoad %int %param_1
+ OpStore %j_1 %376
+ %377 = OpCompositeExtract %float %192 0
+ %378 = OpCompositeExtract %float %192 0
+ %379 = OpCompositeConstruct %v2float %377 %378
+ %380 = OpLoad %int %param_1
OpStore %param_1 %int_0
- OpStore %param_1 %377
- OpStore %param_2 %372
- %378 = OpCompositeExtract %float %189 1
- %379 = OpCompositeExtract %float %214 0
- %380 = OpCompositeConstruct %v2float %378 %379
- %381 = OpLoad %int %pivot
+ OpStore %param_1 %380
+ OpStore %param_2 %375
+ %381 = OpCompositeExtract %float %192 1
+ %382 = OpCompositeExtract %float %217 0
+ %383 = OpCompositeConstruct %v2float %381 %382
+ %384 = OpLoad %int %pivot
OpStore %pivot %int_0
- OpStore %pivot %381
- %383 = OpLoad %int %h
- %384 = OpCompositeExtract %float %376 0
- %385 = OpCompositeExtract %float %364 1
- %386 = OpCompositeConstruct %v2float %384 %385
- %388 = OpLoad %int %h
+ OpStore %pivot %384
+ %386 = OpLoad %int %h
+ %387 = OpCompositeExtract %float %379 0
+ %388 = OpCompositeExtract %float %367 1
+ %389 = OpCompositeConstruct %v2float %387 %388
+ %391 = OpLoad %int %h
OpStore %h %int_0
- OpStore %h %388
- OpStore %param_3 %383
- %391 = OpLoad %int %i_1
+ OpStore %h %391
+ OpStore %param_3 %386
+ %394 = OpLoad %int %i_1
OpStore %i_1 %int_0
- OpStore %i_1 %391
- %392 = OpCompositeExtract %float %364 1
- %393 = OpCompositeExtract %float %386 0
- %394 = OpCompositeConstruct %v2float %392 %393
- %396 = OpLoad %int %h
+ OpStore %i_1 %394
+ %395 = OpCompositeExtract %float %367 1
+ %396 = OpCompositeExtract %float %389 0
+ %397 = OpCompositeConstruct %v2float %395 %396
+ %399 = OpLoad %int %h
OpStore %h %int_0
- OpStore %h %396
- %399 = OpFunctionCall %void %swap_i1_i1_ %param_2 %param_3
- %403 = OpLoad %int %l
+ OpStore %h %399
+ %402 = OpFunctionCall %void %swap_i1_i1_ %param_2 %param_3
+ %406 = OpLoad %int %l
OpStore %l %int_0
- OpStore %l %403
- %406 = OpCompositeExtract %float %214 2
- %407 = OpCompositeExtract %float %35 1
- %408 = OpCompositeConstruct %v2float %406 %407
- %409 = OpLoad %int %param_1
+ OpStore %l %406
+ %409 = OpCompositeExtract %float %217 2
+ %410 = OpCompositeExtract %float %38 1
+ %411 = OpCompositeConstruct %v2float %409 %410
+ %412 = OpLoad %int %param_1
OpStore %param_1 %int_0
- OpStore %param_1 %409
- %410 = OpLoad %int %i_1
- %411 = OpLoad %int %param
+ OpStore %param_1 %412
+ %413 = OpLoad %int %i_1
+ %414 = OpLoad %int %param
OpStore %param %int_0
- OpStore %param %411
- %412 = OpCompositeExtract %float %189 1
- %413 = OpCompositeExtract %float %189 0
- %414 = OpCompositeConstruct %v2float %412 %413
- %415 = OpLoad %int %j_1
+ OpStore %param %414
+ %415 = OpCompositeExtract %float %192 1
+ %416 = OpCompositeExtract %float %192 0
+ %417 = OpCompositeConstruct %v2float %415 %416
+ %418 = OpLoad %int %j_1
OpStore %j_1 %int_0
- OpStore %j_1 %415
- OpReturnValue %410
+ OpStore %j_1 %418
+ OpReturnValue %413
OpFunctionEnd
- %quicksort_ = OpFunction %void None %416
- %418 = OpLabel
- %param_4 = OpVariable %_ptr_Function_int Function %28
- %h_1 = OpVariable %_ptr_Function_int Function %28
- %p = OpVariable %_ptr_Function_int Function %28
- %l_1 = OpVariable %_ptr_Function_int Function %28
- %top = OpVariable %_ptr_Function_int Function %28
- %stack = OpVariable %_ptr_Function__arr_int_uint_10 Function %426
- %param_5 = OpVariable %_ptr_Function_int Function %28
+ %quicksort_ = OpFunction %void None %419
+ %421 = OpLabel
+ %param_4 = OpVariable %_ptr_Function_int Function %31
+ %h_1 = OpVariable %_ptr_Function_int Function %31
+ %p = OpVariable %_ptr_Function_int Function %31
+ %l_1 = OpVariable %_ptr_Function_int Function %31
+ %top = OpVariable %_ptr_Function_int Function %31
+ %stack = OpVariable %_ptr_Function__arr_int_uint_10 Function %429
+ %param_5 = OpVariable %_ptr_Function_int Function %31
OpStore %l_1 %int_0
- %428 = OpLoad %int %param_5
+ %431 = OpLoad %int %param_5
OpStore %param_5 %int_0
- OpStore %param_5 %428
+ OpStore %param_5 %431
OpStore %h_1 %int_9
- %430 = OpLoad %_arr_int_uint_10 %stack
- OpStore %stack %99
- OpStore %stack %430
- %431 = OpCompositeExtract %float %35 1
- %432 = OpCompositeExtract %float %35 1
- %433 = OpCompositeConstruct %v2float %431 %432
- %434 = OpLoad %int %param_5
+ %433 = OpLoad %_arr_int_uint_10 %stack
+ OpStore %stack %102
+ OpStore %stack %433
+ %434 = OpCompositeExtract %float %38 1
+ %435 = OpCompositeExtract %float %38 1
+ %436 = OpCompositeConstruct %v2float %434 %435
+ %437 = OpLoad %int %param_5
OpStore %param_5 %int_0
- OpStore %param_5 %434
+ OpStore %param_5 %437
OpStore %top %int_n1
- %436 = OpLoad %int %p
+ %439 = OpLoad %int %p
OpStore %p %int_0
- OpStore %p %436
- %437 = OpLoad %int %top
- %438 = OpCompositeExtract %float %35 0
- %439 = OpCompositeExtract %float %35 0
- %440 = OpCompositeConstruct %v2float %438 %439
- %441 = OpLoad %int %p
+ OpStore %p %439
+ %440 = OpLoad %int %top
+ %441 = OpCompositeExtract %float %38 0
+ %442 = OpCompositeExtract %float %38 0
+ %443 = OpCompositeConstruct %v2float %441 %442
+ %444 = OpLoad %int %p
OpStore %p %int_0
- OpStore %p %441
- %442 = OpBitcast %int %uint_1
- %443 = OpIAdd %int %437 %442
- %444 = OpLoad %int %top
+ OpStore %p %444
+ %445 = OpBitcast %int %uint_1
+ %446 = OpIAdd %int %440 %445
+ %447 = OpLoad %int %top
OpStore %top %int_0
- OpStore %top %444
- %445 = OpCompositeExtract %float %433 1
- %446 = OpCompositeExtract %float %440 1
- %447 = OpCompositeConstruct %v2float %445 %446
- %448 = OpLoad %int %param_4
+ OpStore %top %447
+ %448 = OpCompositeExtract %float %436 1
+ %449 = OpCompositeExtract %float %443 1
+ %450 = OpCompositeConstruct %v2float %448 %449
+ %451 = OpLoad %int %param_4
OpStore %param_4 %int_0
- OpStore %param_4 %448
- OpStore %top %443
- %449 = OpLoad %int %h_1
+ OpStore %param_4 %451
+ OpStore %top %446
+ %452 = OpLoad %int %h_1
OpStore %h_1 %int_0
- OpStore %h_1 %449
- %450 = OpCompositeExtract %float %440 1
- %451 = OpCompositeExtract %float %440 0
- %452 = OpCompositeExtract %float %440 0
- %453 = OpCompositeConstruct %v3float %450 %451 %452
- %454 = OpLoad %int %param_4
+ OpStore %h_1 %452
+ %453 = OpCompositeExtract %float %443 1
+ %454 = OpCompositeExtract %float %443 0
+ %455 = OpCompositeExtract %float %443 0
+ %456 = OpCompositeConstruct %v3float %453 %454 %455
+ %457 = OpLoad %int %param_4
OpStore %param_4 %int_0
- OpStore %param_4 %454
- %455 = OpLoad %int %l_1
- %456 = OpLoad %QuicksortObject %obj
- OpStore %obj %100
- OpStore %obj %456
- %457 = OpCompositeExtract %float %453 1
- %458 = OpCompositeExtract %float %453 0
- %459 = OpCompositeExtract %float %440 0
- %460 = OpCompositeConstruct %v3float %457 %458 %459
- %461 = OpLoad %_arr_int_uint_10 %stack
- OpStore %stack %99
- OpStore %stack %461
- %462 = OpCompositeExtract %float %433 1
- %463 = OpCompositeExtract %float %433 1
- %464 = OpCompositeExtract %float %433 1
- %465 = OpCompositeConstruct %v3float %462 %463 %464
- %466 = OpLoad %int %l_1
+ OpStore %param_4 %457
+ %458 = OpLoad %int %l_1
+ %459 = OpLoad %QuicksortObject %obj
+ OpStore %obj %103
+ OpStore %obj %459
+ %460 = OpCompositeExtract %float %456 1
+ %461 = OpCompositeExtract %float %456 0
+ %462 = OpCompositeExtract %float %443 0
+ %463 = OpCompositeConstruct %v3float %460 %461 %462
+ %464 = OpLoad %_arr_int_uint_10 %stack
+ OpStore %stack %102
+ OpStore %stack %464
+ %465 = OpCompositeExtract %float %436 1
+ %466 = OpCompositeExtract %float %436 1
+ %467 = OpCompositeExtract %float %436 1
+ %468 = OpCompositeConstruct %v3float %465 %466 %467
+ %469 = OpLoad %int %l_1
OpStore %l_1 %int_0
OpStore %l_1 %int_0
- %467 = OpAccessChain %_ptr_Function_int %stack %443
- OpStore %467 %455
- %468 = OpLoad %int %param_5
+ %470 = OpAccessChain %_ptr_Function_int %stack %446
+ OpStore %470 %458
+ %471 = OpLoad %int %param_5
OpStore %param_5 %int_0
- OpStore %param_5 %468
- %469 = OpLoad %int %top
- %470 = OpLoad %int %param_4
+ OpStore %param_5 %471
+ %472 = OpLoad %int %top
+ %473 = OpLoad %int %param_4
OpStore %param_4 %int_0
- OpStore %param_4 %470
- %471 = OpCompositeExtract %float %35 2
- %472 = OpCompositeExtract %float %447 1
- %473 = OpCompositeExtract %float %35 1
- %474 = OpCompositeConstruct %v3float %471 %472 %473
- %475 = OpAccessChain %_ptr_Function_int %stack %443
- %476 = OpLoad %int %475
- %477 = OpAccessChain %_ptr_Function_int %stack %443
- OpStore %477 %int_0
- %478 = OpAccessChain %_ptr_Function_int %stack %443
- OpStore %478 %476
- %479 = OpIAdd %int %469 %int_1
- %480 = OpAccessChain %_ptr_Function_int %stack %443
- %481 = OpLoad %int %480
- %482 = OpAccessChain %_ptr_Function_int %stack %443
- OpStore %482 %int_0
- %483 = OpAccessChain %_ptr_Function_int %stack %443
- OpStore %483 %481
- %484 = OpCompositeExtract %float %453 0
- %485 = OpCompositeExtract %float %453 2
- %486 = OpCompositeExtract %float %433 1
- %487 = OpCompositeConstruct %v3float %484 %485 %486
- OpStore %top %479
- %488 = OpLoad %int %param_4
+ OpStore %param_4 %473
+ %474 = OpCompositeExtract %float %38 2
+ %475 = OpCompositeExtract %float %450 1
+ %476 = OpCompositeExtract %float %38 1
+ %477 = OpCompositeConstruct %v3float %474 %475 %476
+ %478 = OpAccessChain %_ptr_Function_int %stack %446
+ %479 = OpLoad %int %478
+ %480 = OpAccessChain %_ptr_Function_int %stack %446
+ OpStore %480 %int_0
+ %481 = OpAccessChain %_ptr_Function_int %stack %446
+ OpStore %481 %479
+ %482 = OpIAdd %int %472 %int_1
+ %483 = OpAccessChain %_ptr_Function_int %stack %446
+ %484 = OpLoad %int %483
+ %485 = OpAccessChain %_ptr_Function_int %stack %446
+ OpStore %485 %int_0
+ %486 = OpAccessChain %_ptr_Function_int %stack %446
+ OpStore %486 %484
+ %487 = OpCompositeExtract %float %456 0
+ %488 = OpCompositeExtract %float %456 2
+ %489 = OpCompositeExtract %float %436 1
+ %490 = OpCompositeConstruct %v3float %487 %488 %489
+ OpStore %top %482
+ %491 = OpLoad %int %param_4
OpStore %param_4 %int_0
- OpStore %param_4 %488
- %489 = OpLoad %int %h_1
- %490 = OpLoad %int %param_4
+ OpStore %param_4 %491
+ %492 = OpLoad %int %h_1
+ %493 = OpLoad %int %param_4
OpStore %param_4 %int_0
- OpStore %param_4 %490
- %491 = OpCompositeExtract %float %447 0
- %492 = OpCompositeExtract %float %465 0
- %493 = OpCompositeExtract %float %447 1
- %494 = OpCompositeConstruct %v3float %491 %492 %493
- %495 = OpLoad %int %l_1
+ OpStore %param_4 %493
+ %494 = OpCompositeExtract %float %450 0
+ %495 = OpCompositeExtract %float %468 0
+ %496 = OpCompositeExtract %float %450 1
+ %497 = OpCompositeConstruct %v3float %494 %495 %496
+ %498 = OpLoad %int %l_1
OpStore %l_1 %int_0
- OpStore %l_1 %495
- %496 = OpLoad %int %param_5
+ OpStore %l_1 %498
+ %499 = OpLoad %int %param_5
OpStore %param_5 %int_0
- OpStore %param_5 %496
- %497 = OpCompositeExtract %float %494 2
- %498 = OpCompositeExtract %float %494 2
- %499 = OpCompositeConstruct %v2float %497 %498
- %500 = OpLoad %int %p
+ OpStore %param_5 %499
+ %500 = OpCompositeExtract %float %497 2
+ %501 = OpCompositeExtract %float %497 2
+ %502 = OpCompositeConstruct %v2float %500 %501
+ %503 = OpLoad %int %p
OpStore %p %int_0
- OpStore %p %500
- %501 = OpAccessChain %_ptr_Function_int %stack %479
- OpStore %501 %489
- OpBranch %502
- %502 = OpLabel
- OpLoopMerge %503 %504 None
+ OpStore %p %503
+ %504 = OpAccessChain %_ptr_Function_int %stack %482
+ OpStore %504 %492
OpBranch %505
%505 = OpLabel
- %506 = OpCompositeExtract %float %487 0
- %507 = OpCompositeExtract %float %487 0
- %508 = OpCompositeExtract %float %487 0
- %509 = OpCompositeConstruct %v3float %506 %507 %508
- %510 = OpLoad %int %h_1
+ OpLoopMerge %506 %507 None
+ OpBranch %508
+ %508 = OpLabel
+ %509 = OpCompositeExtract %float %490 0
+ %510 = OpCompositeExtract %float %490 0
+ %511 = OpCompositeExtract %float %490 0
+ %512 = OpCompositeConstruct %v3float %509 %510 %511
+ %513 = OpLoad %int %h_1
OpStore %h_1 %int_0
- OpStore %h_1 %510
- %511 = OpLoad %_arr_int_uint_10 %stack
- OpStore %stack %99
- OpStore %stack %511
- %512 = OpLoad %int %top
- %513 = OpLoad %_arr_int_uint_10 %stack
- OpStore %stack %99
- OpStore %stack %513
- %514 = OpCompositeExtract %float %447 0
- %515 = OpCompositeExtract %float %494 2
- %516 = OpCompositeConstruct %v2float %514 %515
- %517 = OpLoad %int %param_4
+ OpStore %h_1 %513
+ %514 = OpLoad %_arr_int_uint_10 %stack
+ OpStore %stack %102
+ OpStore %stack %514
+ %515 = OpLoad %int %top
+ %516 = OpLoad %_arr_int_uint_10 %stack
+ OpStore %stack %102
+ OpStore %stack %516
+ %517 = OpCompositeExtract %float %450 0
+ %518 = OpCompositeExtract %float %497 2
+ %519 = OpCompositeConstruct %v2float %517 %518
+ %520 = OpLoad %int %param_4
OpStore %param_4 %int_0
- OpStore %param_4 %517
- %518 = OpBitcast %int %uint_0
- %519 = OpSGreaterThanEqual %bool %512 %518
- OpSelectionMerge %520 None
- OpBranchConditional %519 %521 %522
- %521 = OpLabel
- OpBranch %520
- %522 = OpLabel
- OpBranch %503
- %520 = OpLabel
- %523 = OpLoad %QuicksortObject %obj
- OpStore %obj %100
- OpStore %obj %523
- %524 = OpCompositeExtract %float %453 1
- %525 = OpCompositeExtract %float %453 0
- %526 = OpCompositeExtract %float %487 1
- %527 = OpCompositeConstruct %v3float %524 %525 %526
- %528 = OpLoad %int %param_4
+ OpStore %param_4 %520
+ %521 = OpBitcast %int %uint_0
+ %522 = OpSGreaterThanEqual %bool %515 %521
+ OpSelectionMerge %523 None
+ OpBranchConditional %522 %524 %525
+ %524 = OpLabel
+ OpBranch %523
+ %525 = OpLabel
+ OpBranch %506
+ %523 = OpLabel
+ %526 = OpLoad %QuicksortObject %obj
+ OpStore %obj %103
+ OpStore %obj %526
+ %527 = OpCompositeExtract %float %456 1
+ %528 = OpCompositeExtract %float %456 0
+ %529 = OpCompositeExtract %float %490 1
+ %530 = OpCompositeConstruct %v3float %527 %528 %529
+ %531 = OpLoad %int %param_4
OpStore %param_4 %int_0
- OpStore %param_4 %528
- %529 = OpLoad %int %top
- %530 = OpCompositeExtract %float %499 0
- %531 = OpCompositeExtract %float %516 1
- %532 = OpCompositeExtract %float %499 0
- %533 = OpCompositeConstruct %v3float %530 %531 %532
- %534 = OpLoad %int %h_1
+ OpStore %param_4 %531
+ %532 = OpLoad %int %top
+ %533 = OpCompositeExtract %float %502 0
+ %534 = OpCompositeExtract %float %519 1
+ %535 = OpCompositeExtract %float %502 0
+ %536 = OpCompositeConstruct %v3float %533 %534 %535
+ %537 = OpLoad %int %h_1
OpStore %h_1 %int_0
- OpStore %h_1 %534
- %535 = OpCompositeExtract %float %433 0
- %536 = OpCompositeExtract %float %433 0
- %537 = OpCompositeConstruct %v2float %535 %536
- %538 = OpLoad %int %p
- OpStore %p %int_0
- OpStore %p %538
- %539 = OpBitcast %int %uint_1
- %540 = OpISub %int %529 %539
- OpStore %top %540
+ OpStore %h_1 %537
+ %538 = OpCompositeExtract %float %436 0
+ %539 = OpCompositeExtract %float %436 0
+ %540 = OpCompositeConstruct %v2float %538 %539
%541 = OpLoad %int %p
OpStore %p %int_0
OpStore %p %541
- %542 = OpAccessChain %_ptr_Function_int %stack %443
- %543 = OpLoad %int %542
- %544 = OpAccessChain %_ptr_Function_int %stack %443
- OpStore %544 %int_0
- %545 = OpAccessChain %_ptr_Function_int %stack %443
- OpStore %545 %543
- %546 = OpAccessChain %_ptr_Function_int %stack %529
- %547 = OpLoad %int %546
- %548 = OpLoad %_arr_int_uint_10 %stack
- OpStore %stack %99
- OpStore %stack %548
- %549 = OpCompositeExtract %float %453 1
- %550 = OpCompositeExtract %float %453 0
- %551 = OpCompositeExtract %float %494 1
- %552 = OpCompositeConstruct %v3float %549 %550 %551
- %553 = OpLoad %int %l_1
+ %542 = OpBitcast %int %uint_1
+ %543 = OpISub %int %532 %542
+ OpStore %top %543
+ %544 = OpLoad %int %p
+ OpStore %p %int_0
+ OpStore %p %544
+ %545 = OpAccessChain %_ptr_Function_int %stack %446
+ %546 = OpLoad %int %545
+ %547 = OpAccessChain %_ptr_Function_int %stack %446
+ OpStore %547 %int_0
+ %548 = OpAccessChain %_ptr_Function_int %stack %446
+ OpStore %548 %546
+ %549 = OpAccessChain %_ptr_Function_int %stack %532
+ %550 = OpLoad %int %549
+ %551 = OpLoad %_arr_int_uint_10 %stack
+ OpStore %stack %102
+ OpStore %stack %551
+ %552 = OpCompositeExtract %float %456 1
+ %553 = OpCompositeExtract %float %456 0
+ %554 = OpCompositeExtract %float %497 1
+ %555 = OpCompositeConstruct %v3float %552 %553 %554
+ %556 = OpLoad %int %l_1
OpStore %l_1 %int_0
- OpStore %l_1 %553
- OpStore %h_1 %547
- %554 = OpLoad %_arr_int_uint_10 %stack
- OpStore %stack %99
- OpStore %stack %554
- %555 = OpCompositeExtract %float %474 1
- %556 = OpCompositeExtract %float %465 1
- %557 = OpCompositeConstruct %v2float %555 %556
- %558 = OpLoad %int %p
+ OpStore %l_1 %556
+ OpStore %h_1 %550
+ %557 = OpLoad %_arr_int_uint_10 %stack
+ OpStore %stack %102
+ OpStore %stack %557
+ %558 = OpCompositeExtract %float %477 1
+ %559 = OpCompositeExtract %float %468 1
+ %560 = OpCompositeConstruct %v2float %558 %559
+ %561 = OpLoad %int %p
OpStore %p %int_0
- OpStore %p %558
- %559 = OpLoad %int %top
- %560 = OpLoad %int %param_4
+ OpStore %p %561
+ %562 = OpLoad %int %top
+ %563 = OpLoad %int %param_4
OpStore %param_4 %int_0
- OpStore %param_4 %560
- %561 = OpAccessChain %_ptr_Function_int %stack %479
- %562 = OpLoad %int %561
- %563 = OpAccessChain %_ptr_Function_int %stack %479
- OpStore %563 %int_0
- %564 = OpAccessChain %_ptr_Function_int %stack %479
- OpStore %564 %562
- %565 = OpCompositeExtract %float %35 1
- %566 = OpCompositeExtract %float %35 2
- %567 = OpCompositeConstruct %v2float %565 %566
- %568 = OpISub %int %559 %int_1
- OpStore %top %568
- %569 = OpLoad %int %param_5
+ OpStore %param_4 %563
+ %564 = OpAccessChain %_ptr_Function_int %stack %482
+ %565 = OpLoad %int %564
+ %566 = OpAccessChain %_ptr_Function_int %stack %482
+ OpStore %566 %int_0
+ %567 = OpAccessChain %_ptr_Function_int %stack %482
+ OpStore %567 %565
+ %568 = OpCompositeExtract %float %38 1
+ %569 = OpCompositeExtract %float %38 2
+ %570 = OpCompositeConstruct %v2float %568 %569
+ %571 = OpISub %int %562 %int_1
+ OpStore %top %571
+ %572 = OpLoad %int %param_5
OpStore %param_5 %int_0
- OpStore %param_5 %569
- %570 = OpCompositeExtract %float %537 1
- %571 = OpCompositeExtract %float %499 0
- %572 = OpCompositeExtract %float %537 1
- %573 = OpCompositeConstruct %v3float %570 %571 %572
- %574 = OpLoad %int %h_1
+ OpStore %param_5 %572
+ %573 = OpCompositeExtract %float %540 1
+ %574 = OpCompositeExtract %float %502 0
+ %575 = OpCompositeExtract %float %540 1
+ %576 = OpCompositeConstruct %v3float %573 %574 %575
+ %577 = OpLoad %int %h_1
OpStore %h_1 %int_0
- OpStore %h_1 %574
- %575 = OpCompositeExtract %float %494 1
- %576 = OpCompositeExtract %float %494 2
- %577 = OpCompositeConstruct %v2float %575 %576
- %578 = OpAccessChain %_ptr_Function_int %stack %479
- %579 = OpLoad %int %578
- %580 = OpAccessChain %_ptr_Function_int %stack %479
- OpStore %580 %int_0
- %581 = OpAccessChain %_ptr_Function_int %stack %479
- OpStore %581 %579
- %582 = OpAccessChain %_ptr_Function_int %stack %559
- %583 = OpLoad %int %582
- %584 = OpLoad %int %p
+ OpStore %h_1 %577
+ %578 = OpCompositeExtract %float %497 1
+ %579 = OpCompositeExtract %float %497 2
+ %580 = OpCompositeConstruct %v2float %578 %579
+ %581 = OpAccessChain %_ptr_Function_int %stack %482
+ %582 = OpLoad %int %581
+ %583 = OpAccessChain %_ptr_Function_int %stack %482
+ OpStore %583 %int_0
+ %584 = OpAccessChain %_ptr_Function_int %stack %482
+ OpStore %584 %582
+ %585 = OpAccessChain %_ptr_Function_int %stack %562
+ %586 = OpLoad %int %585
+ %587 = OpLoad %int %p
OpStore %p %int_0
- OpStore %p %584
- %585 = OpCompositeExtract %float %567 1
- %586 = OpCompositeExtract %float %567 1
- %587 = OpCompositeExtract %float %499 0
- %588 = OpCompositeConstruct %v3float %585 %586 %587
- %589 = OpLoad %int %param_5
+ OpStore %p %587
+ %588 = OpCompositeExtract %float %570 1
+ %589 = OpCompositeExtract %float %570 1
+ %590 = OpCompositeExtract %float %502 0
+ %591 = OpCompositeConstruct %v3float %588 %589 %590
+ %592 = OpLoad %int %param_5
OpStore %param_5 %int_0
- OpStore %param_5 %589
- OpStore %l_1 %583
- %590 = OpLoad %int %top
+ OpStore %param_5 %592
+ OpStore %l_1 %586
+ %593 = OpLoad %int %top
OpStore %top %int_0
- OpStore %top %590
- %591 = OpLoad %int %l_1
- OpStore %param_4 %591
- %592 = OpAccessChain %_ptr_Function_int %stack %529
- %593 = OpLoad %int %592
- %594 = OpAccessChain %_ptr_Function_int %stack %529
- OpStore %594 %int_0
- %595 = OpAccessChain %_ptr_Function_int %stack %529
- OpStore %595 %593
- %596 = OpCompositeExtract %float %533 1
- %597 = OpCompositeExtract %float %533 2
- %598 = OpCompositeConstruct %v2float %596 %597
- %599 = OpLoad %int %h_1
- %600 = OpCompositeExtract %float %447 0
- %601 = OpCompositeExtract %float %35 1
- %602 = OpCompositeConstruct %v2float %600 %601
- OpStore %param_5 %599
- %603 = OpAccessChain %_ptr_Function_int %stack %479
- %604 = OpLoad %int %603
- %605 = OpAccessChain %_ptr_Function_int %stack %479
- OpStore %605 %int_0
- %606 = OpAccessChain %_ptr_Function_int %stack %479
- OpStore %606 %604
- %607 = OpFunctionCall %int %performPartition_i1_i1_ %param_4 %param_5
- %610 = OpCompositeExtract %float %516 0
- %611 = OpCompositeExtract %float %527 0
- %612 = OpCompositeConstruct %v2float %610 %611
- %613 = OpLoad %int %param_5
+ OpStore %top %593
+ %594 = OpLoad %int %l_1
+ OpStore %param_4 %594
+ %595 = OpAccessChain %_ptr_Function_int %stack %532
+ %596 = OpLoad %int %595
+ %597 = OpAccessChain %_ptr_Function_int %stack %532
+ OpStore %597 %int_0
+ %598 = OpAccessChain %_ptr_Function_int %stack %532
+ OpStore %598 %596
+ %599 = OpCompositeExtract %float %536 1
+ %600 = OpCompositeExtract %float %536 2
+ %601 = OpCompositeConstruct %v2float %599 %600
+ %602 = OpLoad %int %h_1
+ %603 = OpCompositeExtract %float %450 0
+ %604 = OpCompositeExtract %float %38 1
+ %605 = OpCompositeConstruct %v2float %603 %604
+ OpStore %param_5 %602
+ %606 = OpAccessChain %_ptr_Function_int %stack %482
+ %607 = OpLoad %int %606
+ %608 = OpAccessChain %_ptr_Function_int %stack %482
+ OpStore %608 %int_0
+ %609 = OpAccessChain %_ptr_Function_int %stack %482
+ OpStore %609 %607
+ %610 = OpFunctionCall %int %performPartition_i1_i1_ %param_4 %param_5
+ %613 = OpCompositeExtract %float %519 0
+ %614 = OpCompositeExtract %float %530 0
+ %615 = OpCompositeConstruct %v2float %613 %614
+ %616 = OpLoad %int %param_5
OpStore %param_5 %int_0
- OpStore %param_5 %613
- OpStore %p %607
- %614 = OpLoad %int %param_4
+ OpStore %param_5 %616
+ OpStore %p %610
+ %617 = OpLoad %int %param_4
OpStore %param_4 %int_0
- OpStore %param_4 %614
- %615 = OpLoad %int %p
- %616 = OpLoad %int %h_1
+ OpStore %param_4 %617
+ %618 = OpLoad %int %p
+ %619 = OpLoad %int %h_1
OpStore %h_1 %int_0
- OpStore %h_1 %616
- %617 = OpCompositeExtract %float %527 1
- %618 = OpCompositeExtract %float %527 1
- %619 = OpCompositeConstruct %v2float %617 %618
- %620 = OpLoad %int %l_1
+ OpStore %h_1 %619
+ %620 = OpCompositeExtract %float %530 1
+ %621 = OpCompositeExtract %float %530 1
+ %622 = OpCompositeConstruct %v2float %620 %621
+ %623 = OpLoad %int %l_1
OpStore %l_1 %int_0
- OpStore %l_1 %620
- %621 = OpLoad %int %h_1
+ OpStore %l_1 %623
+ %624 = OpLoad %int %h_1
OpStore %h_1 %int_0
- OpStore %h_1 %621
- %622 = OpLoad %int %l_1
- %623 = OpAccessChain %_ptr_Function_int %stack %529
- %624 = OpLoad %int %623
- %625 = OpAccessChain %_ptr_Function_int %stack %529
- OpStore %625 %int_0
- %626 = OpAccessChain %_ptr_Function_int %stack %529
- OpStore %626 %624
- %627 = OpLoad %int %h_1
+ OpStore %h_1 %624
+ %625 = OpLoad %int %l_1
+ %626 = OpAccessChain %_ptr_Function_int %stack %532
+ %627 = OpLoad %int %626
+ %628 = OpAccessChain %_ptr_Function_int %stack %532
+ OpStore %628 %int_0
+ %629 = OpAccessChain %_ptr_Function_int %stack %532
+ OpStore %629 %627
+ %630 = OpLoad %int %h_1
OpStore %h_1 %int_0
- OpStore %h_1 %627
- %628 = OpCompositeExtract %float %516 1
- %629 = OpCompositeExtract %float %567 0
- %630 = OpCompositeConstruct %v2float %628 %629
- %631 = OpAccessChain %_ptr_Function_int %stack %479
- %632 = OpLoad %int %631
- %633 = OpAccessChain %_ptr_Function_int %stack %479
- OpStore %633 %int_0
- %634 = OpAccessChain %_ptr_Function_int %stack %479
- OpStore %634 %632
- %635 = OpBitcast %int %uint_1
- %636 = OpISub %int %615 %635
- %637 = OpSGreaterThan %bool %636 %622
- OpSelectionMerge %638 None
- OpBranchConditional %637 %639 %638
- %639 = OpLabel
- %640 = OpLoad %int %param_4
+ OpStore %h_1 %630
+ %631 = OpCompositeExtract %float %519 1
+ %632 = OpCompositeExtract %float %570 0
+ %633 = OpCompositeConstruct %v2float %631 %632
+ %634 = OpAccessChain %_ptr_Function_int %stack %482
+ %635 = OpLoad %int %634
+ %636 = OpAccessChain %_ptr_Function_int %stack %482
+ OpStore %636 %int_0
+ %637 = OpAccessChain %_ptr_Function_int %stack %482
+ OpStore %637 %635
+ %638 = OpBitcast %int %uint_1
+ %639 = OpISub %int %618 %638
+ %640 = OpSGreaterThan %bool %639 %625
+ OpSelectionMerge %641 None
+ OpBranchConditional %640 %642 %641
+ %642 = OpLabel
+ %643 = OpLoad %int %param_4
OpStore %param_4 %int_0
- OpStore %param_4 %640
- %641 = OpLoad %int %top
- %642 = OpCompositeExtract %float %552 1
- %643 = OpCompositeExtract %float %433 1
- %644 = OpCompositeConstruct %v2float %642 %643
- %645 = OpAccessChain %_ptr_Function_int %stack %479
- %646 = OpLoad %int %645
- %647 = OpAccessChain %_ptr_Function_int %stack %479
- OpStore %647 %int_0
- %648 = OpAccessChain %_ptr_Function_int %stack %479
- OpStore %648 %646
- %649 = OpLoad %_arr_int_uint_10 %stack
- OpStore %stack %99
- OpStore %stack %649
- %650 = OpCompositeExtract %float %533 2
- %651 = OpCompositeExtract %float %533 1
- %652 = OpCompositeConstruct %v2float %650 %651
- %653 = OpCompositeExtract %float %619 1
- %654 = OpCompositeExtract %float %598 0
- %655 = OpCompositeExtract %float %598 0
- %656 = OpCompositeConstruct %v3float %653 %654 %655
- %657 = OpLoad %int %l_1
- %658 = OpAccessChain %_ptr_Function_int %stack %559
- %659 = OpLoad %int %658
- %660 = OpAccessChain %_ptr_Function_int %stack %559
- OpStore %660 %int_0
- %661 = OpAccessChain %_ptr_Function_int %stack %559
- OpStore %661 %659
- %662 = OpCompositeExtract %float %494 0
- %663 = OpCompositeExtract %float %656 0
- %664 = OpCompositeConstruct %v2float %662 %663
- %665 = OpLoad %int %param_5
+ OpStore %param_4 %643
+ %644 = OpLoad %int %top
+ %645 = OpCompositeExtract %float %555 1
+ %646 = OpCompositeExtract %float %436 1
+ %647 = OpCompositeConstruct %v2float %645 %646
+ %648 = OpAccessChain %_ptr_Function_int %stack %482
+ %649 = OpLoad %int %648
+ %650 = OpAccessChain %_ptr_Function_int %stack %482
+ OpStore %650 %int_0
+ %651 = OpAccessChain %_ptr_Function_int %stack %482
+ OpStore %651 %649
+ %652 = OpLoad %_arr_int_uint_10 %stack
+ OpStore %stack %102
+ OpStore %stack %652
+ %653 = OpCompositeExtract %float %536 2
+ %654 = OpCompositeExtract %float %536 1
+ %655 = OpCompositeConstruct %v2float %653 %654
+ %656 = OpCompositeExtract %float %622 1
+ %657 = OpCompositeExtract %float %601 0
+ %658 = OpCompositeExtract %float %601 0
+ %659 = OpCompositeConstruct %v3float %656 %657 %658
+ %660 = OpLoad %int %l_1
+ %661 = OpAccessChain %_ptr_Function_int %stack %562
+ %662 = OpLoad %int %661
+ %663 = OpAccessChain %_ptr_Function_int %stack %562
+ OpStore %663 %int_0
+ %664 = OpAccessChain %_ptr_Function_int %stack %562
+ OpStore %664 %662
+ %665 = OpCompositeExtract %float %497 0
+ %666 = OpCompositeExtract %float %659 0
+ %667 = OpCompositeConstruct %v2float %665 %666
+ %668 = OpLoad %int %param_5
OpStore %param_5 %int_0
- OpStore %param_5 %665
- %666 = OpIAdd %int %int_1 %641
- %667 = OpAccessChain %_ptr_Function_int %stack %529
- %668 = OpLoad %int %667
- %669 = OpAccessChain %_ptr_Function_int %stack %529
- OpStore %669 %int_0
- %670 = OpAccessChain %_ptr_Function_int %stack %529
- OpStore %670 %668
- %671 = OpCompositeExtract %float %509 1
- %672 = OpCompositeExtract %float %509 1
- %673 = OpCompositeExtract %float %487 0
- %674 = OpCompositeConstruct %v3float %671 %672 %673
- %675 = OpLoad %int %param_5
+ OpStore %param_5 %668
+ %669 = OpIAdd %int %int_1 %644
+ %670 = OpAccessChain %_ptr_Function_int %stack %532
+ %671 = OpLoad %int %670
+ %672 = OpAccessChain %_ptr_Function_int %stack %532
+ OpStore %672 %int_0
+ %673 = OpAccessChain %_ptr_Function_int %stack %532
+ OpStore %673 %671
+ %674 = OpCompositeExtract %float %512 1
+ %675 = OpCompositeExtract %float %512 1
+ %676 = OpCompositeExtract %float %490 0
+ %677 = OpCompositeConstruct %v3float %674 %675 %676
+ %678 = OpLoad %int %param_5
OpStore %param_5 %int_0
- OpStore %param_5 %675
- %676 = OpAccessChain %_ptr_Function_int %stack %666
- OpStore %676 %657
- %677 = OpLoad %int %top
- %678 = OpAccessChain %_ptr_Function_int %stack %479
- %679 = OpLoad %int %678
- %680 = OpAccessChain %_ptr_Function_int %stack %479
- OpStore %680 %int_0
- %681 = OpAccessChain %_ptr_Function_int %stack %479
- OpStore %681 %679
- %682 = OpCompositeExtract %float %577 1
- %683 = OpCompositeExtract %float %577 0
- %684 = OpCompositeConstruct %v2float %682 %683
- %685 = OpAccessChain %_ptr_Function_int %stack %666
- %686 = OpLoad %int %685
- %687 = OpAccessChain %_ptr_Function_int %stack %666
- OpStore %687 %int_0
- %688 = OpAccessChain %_ptr_Function_int %stack %666
- OpStore %688 %686
- %690 = OpBitcast %uint %677
- %691 = OpIAdd %uint %uint_1 %690
- %689 = OpBitcast %int %691
- %692 = OpAccessChain %_ptr_Function_int %stack %479
- %693 = OpLoad %int %692
- %694 = OpAccessChain %_ptr_Function_int %stack %479
- OpStore %694 %int_0
- %695 = OpAccessChain %_ptr_Function_int %stack %479
- OpStore %695 %693
- %696 = OpCompositeExtract %float %588 2
- %697 = OpCompositeExtract %float %684 1
- %698 = OpCompositeExtract %float %588 2
- %699 = OpCompositeConstruct %v3float %696 %697 %698
- %700 = OpLoad %int %h_1
+ OpStore %param_5 %678
+ %679 = OpAccessChain %_ptr_Function_int %stack %669
+ OpStore %679 %660
+ %680 = OpLoad %int %top
+ %681 = OpAccessChain %_ptr_Function_int %stack %482
+ %682 = OpLoad %int %681
+ %683 = OpAccessChain %_ptr_Function_int %stack %482
+ OpStore %683 %int_0
+ %684 = OpAccessChain %_ptr_Function_int %stack %482
+ OpStore %684 %682
+ %685 = OpCompositeExtract %float %580 1
+ %686 = OpCompositeExtract %float %580 0
+ %687 = OpCompositeConstruct %v2float %685 %686
+ %688 = OpAccessChain %_ptr_Function_int %stack %669
+ %689 = OpLoad %int %688
+ %690 = OpAccessChain %_ptr_Function_int %stack %669
+ OpStore %690 %int_0
+ %691 = OpAccessChain %_ptr_Function_int %stack %669
+ OpStore %691 %689
+ %693 = OpBitcast %uint %680
+ %694 = OpIAdd %uint %uint_1 %693
+ %692 = OpBitcast %int %694
+ %695 = OpAccessChain %_ptr_Function_int %stack %482
+ %696 = OpLoad %int %695
+ %697 = OpAccessChain %_ptr_Function_int %stack %482
+ OpStore %697 %int_0
+ %698 = OpAccessChain %_ptr_Function_int %stack %482
+ OpStore %698 %696
+ %699 = OpCompositeExtract %float %591 2
+ %700 = OpCompositeExtract %float %687 1
+ %701 = OpCompositeExtract %float %591 2
+ %702 = OpCompositeConstruct %v3float %699 %700 %701
+ %703 = OpLoad %int %h_1
OpStore %h_1 %int_0
- OpStore %h_1 %700
- OpStore %top %689
- %701 = OpLoad %_arr_int_uint_10 %stack
- OpStore %stack %99
- OpStore %stack %701
- %702 = OpLoad %int %p
- %703 = OpCompositeExtract %float %588 0
- %704 = OpCompositeExtract %float %567 1
- %705 = OpCompositeConstruct %v2float %703 %704
- %706 = OpAccessChain %_ptr_Function_int %stack %559
- %707 = OpLoad %int %706
- %708 = OpAccessChain %_ptr_Function_int %stack %559
- OpStore %708 %int_0
- %709 = OpAccessChain %_ptr_Function_int %stack %559
- OpStore %709 %707
- %710 = OpAccessChain %_ptr_Function_int %stack %559
- %711 = OpLoad %int %710
- %712 = OpAccessChain %_ptr_Function_int %stack %559
- OpStore %712 %int_0
- %713 = OpAccessChain %_ptr_Function_int %stack %559
- OpStore %713 %711
- %714 = OpAccessChain %_ptr_Function_int %stack %689
- %715 = OpBitcast %int %uint_1
- %716 = OpISub %int %702 %715
- OpStore %714 %716
- %717 = OpAccessChain %_ptr_Function_int %stack %443
- %718 = OpLoad %int %717
- %719 = OpAccessChain %_ptr_Function_int %stack %443
- OpStore %719 %int_0
- %720 = OpAccessChain %_ptr_Function_int %stack %443
- OpStore %720 %718
- %721 = OpCompositeExtract %float %533 2
- %722 = OpCompositeExtract %float %533 1
- %723 = OpCompositeConstruct %v2float %721 %722
- %724 = OpAccessChain %_ptr_Function_int %stack %689
- %725 = OpLoad %int %724
- %726 = OpAccessChain %_ptr_Function_int %stack %689
- OpStore %726 %int_0
- %727 = OpAccessChain %_ptr_Function_int %stack %689
- OpStore %727 %725
- OpBranch %638
- %638 = OpLabel
- %728 = OpAccessChain %_ptr_Function_int %stack %443
- %729 = OpLoad %int %728
- %730 = OpAccessChain %_ptr_Function_int %stack %443
- OpStore %730 %int_0
- %731 = OpAccessChain %_ptr_Function_int %stack %443
- OpStore %731 %729
- %732 = OpCompositeExtract %float %35 0
- %733 = OpCompositeExtract %float %35 1
- %734 = OpCompositeConstruct %v2float %732 %733
- %735 = OpLoad %QuicksortObject %obj
- OpStore %obj %100
- OpStore %obj %735
- %736 = OpLoad %int %p
- %737 = OpAccessChain %_ptr_Function_int %stack %559
- %738 = OpLoad %int %737
- %739 = OpAccessChain %_ptr_Function_int %stack %559
- OpStore %739 %int_0
- %740 = OpAccessChain %_ptr_Function_int %stack %559
- OpStore %740 %738
- %741 = OpCompositeExtract %float %552 2
- %742 = OpCompositeExtract %float %433 0
- %743 = OpCompositeExtract %float %433 1
- %744 = OpCompositeConstruct %v3float %741 %742 %743
- %745 = OpLoad %int %p
+ OpStore %h_1 %703
+ OpStore %top %692
+ %704 = OpLoad %_arr_int_uint_10 %stack
+ OpStore %stack %102
+ OpStore %stack %704
+ %705 = OpLoad %int %p
+ %706 = OpCompositeExtract %float %591 0
+ %707 = OpCompositeExtract %float %570 1
+ %708 = OpCompositeConstruct %v2float %706 %707
+ %709 = OpAccessChain %_ptr_Function_int %stack %562
+ %710 = OpLoad %int %709
+ %711 = OpAccessChain %_ptr_Function_int %stack %562
+ OpStore %711 %int_0
+ %712 = OpAccessChain %_ptr_Function_int %stack %562
+ OpStore %712 %710
+ %713 = OpAccessChain %_ptr_Function_int %stack %562
+ %714 = OpLoad %int %713
+ %715 = OpAccessChain %_ptr_Function_int %stack %562
+ OpStore %715 %int_0
+ %716 = OpAccessChain %_ptr_Function_int %stack %562
+ OpStore %716 %714
+ %717 = OpAccessChain %_ptr_Function_int %stack %692
+ %718 = OpBitcast %int %uint_1
+ %719 = OpISub %int %705 %718
+ OpStore %717 %719
+ %720 = OpAccessChain %_ptr_Function_int %stack %446
+ %721 = OpLoad %int %720
+ %722 = OpAccessChain %_ptr_Function_int %stack %446
+ OpStore %722 %int_0
+ %723 = OpAccessChain %_ptr_Function_int %stack %446
+ OpStore %723 %721
+ %724 = OpCompositeExtract %float %536 2
+ %725 = OpCompositeExtract %float %536 1
+ %726 = OpCompositeConstruct %v2float %724 %725
+ %727 = OpAccessChain %_ptr_Function_int %stack %692
+ %728 = OpLoad %int %727
+ %729 = OpAccessChain %_ptr_Function_int %stack %692
+ OpStore %729 %int_0
+ %730 = OpAccessChain %_ptr_Function_int %stack %692
+ OpStore %730 %728
+ OpBranch %641
+ %641 = OpLabel
+ %731 = OpAccessChain %_ptr_Function_int %stack %446
+ %732 = OpLoad %int %731
+ %733 = OpAccessChain %_ptr_Function_int %stack %446
+ OpStore %733 %int_0
+ %734 = OpAccessChain %_ptr_Function_int %stack %446
+ OpStore %734 %732
+ %735 = OpCompositeExtract %float %38 0
+ %736 = OpCompositeExtract %float %38 1
+ %737 = OpCompositeConstruct %v2float %735 %736
+ %738 = OpLoad %QuicksortObject %obj
+ OpStore %obj %103
+ OpStore %obj %738
+ %739 = OpLoad %int %p
+ %740 = OpAccessChain %_ptr_Function_int %stack %562
+ %741 = OpLoad %int %740
+ %742 = OpAccessChain %_ptr_Function_int %stack %562
+ OpStore %742 %int_0
+ %743 = OpAccessChain %_ptr_Function_int %stack %562
+ OpStore %743 %741
+ %744 = OpCompositeExtract %float %555 2
+ %745 = OpCompositeExtract %float %436 0
+ %746 = OpCompositeExtract %float %436 1
+ %747 = OpCompositeConstruct %v3float %744 %745 %746
+ %748 = OpLoad %int %p
OpStore %p %int_0
- OpStore %p %745
- %746 = OpCompositeExtract %float %487 2
- %747 = OpCompositeExtract %float %487 0
- %748 = OpCompositeExtract %float %577 0
- %749 = OpCompositeConstruct %v3float %746 %747 %748
- %750 = OpAccessChain %_ptr_Function_int %stack %559
- %751 = OpLoad %int %750
- %752 = OpAccessChain %_ptr_Function_int %stack %559
- OpStore %752 %int_0
- %753 = OpAccessChain %_ptr_Function_int %stack %559
- OpStore %753 %751
- %754 = OpLoad %int %h_1
- %755 = OpLoad %int %top
+ OpStore %p %748
+ %749 = OpCompositeExtract %float %490 2
+ %750 = OpCompositeExtract %float %490 0
+ %751 = OpCompositeExtract %float %580 0
+ %752 = OpCompositeConstruct %v3float %749 %750 %751
+ %753 = OpAccessChain %_ptr_Function_int %stack %562
+ %754 = OpLoad %int %753
+ %755 = OpAccessChain %_ptr_Function_int %stack %562
+ OpStore %755 %int_0
+ %756 = OpAccessChain %_ptr_Function_int %stack %562
+ OpStore %756 %754
+ %757 = OpLoad %int %h_1
+ %758 = OpLoad %int %top
OpStore %top %int_0
- OpStore %top %755
- %756 = OpCompositeExtract %float %460 2
- %757 = OpCompositeExtract %float %527 0
- %758 = OpCompositeExtract %float %460 0
- %759 = OpCompositeConstruct %v3float %756 %757 %758
- %760 = OpAccessChain %_ptr_Function_int %stack %479
- %761 = OpLoad %int %760
- %762 = OpAccessChain %_ptr_Function_int %stack %479
- OpStore %762 %int_0
- %763 = OpAccessChain %_ptr_Function_int %stack %479
- OpStore %763 %761
- %764 = OpLoad %int %p
+ OpStore %top %758
+ %759 = OpCompositeExtract %float %463 2
+ %760 = OpCompositeExtract %float %530 0
+ %761 = OpCompositeExtract %float %463 0
+ %762 = OpCompositeConstruct %v3float %759 %760 %761
+ %763 = OpAccessChain %_ptr_Function_int %stack %482
+ %764 = OpLoad %int %763
+ %765 = OpAccessChain %_ptr_Function_int %stack %482
+ OpStore %765 %int_0
+ %766 = OpAccessChain %_ptr_Function_int %stack %482
+ OpStore %766 %764
+ %767 = OpLoad %int %p
OpStore %p %int_0
- OpStore %p %764
- %766 = OpBitcast %uint %736
- %767 = OpIAdd %uint %uint_1 %766
- %765 = OpBitcast %int %767
- %768 = OpSLessThan %bool %765 %754
- OpSelectionMerge %769 None
- OpBranchConditional %768 %770 %769
- %770 = OpLabel
- %771 = OpAccessChain %_ptr_Function_int %stack %559
- %772 = OpLoad %int %771
- %773 = OpAccessChain %_ptr_Function_int %stack %559
- OpStore %773 %int_0
- %774 = OpAccessChain %_ptr_Function_int %stack %559
- OpStore %774 %772
- %775 = OpCompositeExtract %float %734 1
- %776 = OpCompositeExtract %float %630 0
- %777 = OpCompositeConstruct %v2float %775 %776
- %778 = OpLoad %int %l_1
+ OpStore %p %767
+ %769 = OpBitcast %uint %739
+ %770 = OpIAdd %uint %uint_1 %769
+ %768 = OpBitcast %int %770
+ %771 = OpSLessThan %bool %768 %757
+ OpSelectionMerge %772 None
+ OpBranchConditional %771 %773 %772
+ %773 = OpLabel
+ %774 = OpAccessChain %_ptr_Function_int %stack %562
+ %775 = OpLoad %int %774
+ %776 = OpAccessChain %_ptr_Function_int %stack %562
+ OpStore %776 %int_0
+ %777 = OpAccessChain %_ptr_Function_int %stack %562
+ OpStore %777 %775
+ %778 = OpCompositeExtract %float %737 1
+ %779 = OpCompositeExtract %float %633 0
+ %780 = OpCompositeConstruct %v2float %778 %779
+ %781 = OpLoad %int %l_1
OpStore %l_1 %int_0
- OpStore %l_1 %778
- %779 = OpLoad %int %top
- %780 = OpAccessChain %_ptr_Function_int %stack %559
- %781 = OpLoad %int %780
- %782 = OpAccessChain %_ptr_Function_int %stack %559
- OpStore %782 %int_0
- %783 = OpAccessChain %_ptr_Function_int %stack %559
- OpStore %783 %781
- %784 = OpCompositeExtract %float %474 1
- %785 = OpCompositeExtract %float %460 1
- %786 = OpCompositeExtract %float %460 1
- %787 = OpCompositeConstruct %v3float %784 %785 %786
- %788 = OpIAdd %int %779 %int_1
- %789 = OpLoad %int %param_5
+ OpStore %l_1 %781
+ %782 = OpLoad %int %top
+ %783 = OpAccessChain %_ptr_Function_int %stack %562
+ %784 = OpLoad %int %783
+ %785 = OpAccessChain %_ptr_Function_int %stack %562
+ OpStore %785 %int_0
+ %786 = OpAccessChain %_ptr_Function_int %stack %562
+ OpStore %786 %784
+ %787 = OpCompositeExtract %float %477 1
+ %788 = OpCompositeExtract %float %463 1
+ %789 = OpCompositeExtract %float %463 1
+ %790 = OpCompositeConstruct %v3float %787 %788 %789
+ %791 = OpIAdd %int %782 %int_1
+ %792 = OpLoad %int %param_5
OpStore %param_5 %int_0
- OpStore %param_5 %789
- OpStore %top %788
- %790 = OpAccessChain %_ptr_Function_int %stack %559
- %791 = OpLoad %int %790
- %792 = OpAccessChain %_ptr_Function_int %stack %559
- OpStore %792 %int_0
- %793 = OpAccessChain %_ptr_Function_int %stack %559
- OpStore %793 %791
- %794 = OpLoad %int %p
- %795 = OpLoad %int %param_5
+ OpStore %param_5 %792
+ OpStore %top %791
+ %793 = OpAccessChain %_ptr_Function_int %stack %562
+ %794 = OpLoad %int %793
+ %795 = OpAccessChain %_ptr_Function_int %stack %562
+ OpStore %795 %int_0
+ %796 = OpAccessChain %_ptr_Function_int %stack %562
+ OpStore %796 %794
+ %797 = OpLoad %int %p
+ %798 = OpLoad %int %param_5
OpStore %param_5 %int_0
- OpStore %param_5 %795
- %796 = OpCompositeExtract %float %460 2
- %797 = OpCompositeExtract %float %460 0
- %798 = OpCompositeExtract %float %527 0
- %799 = OpCompositeConstruct %v3float %796 %797 %798
- %800 = OpLoad %int %p
+ OpStore %param_5 %798
+ %799 = OpCompositeExtract %float %463 2
+ %800 = OpCompositeExtract %float %463 0
+ %801 = OpCompositeExtract %float %530 0
+ %802 = OpCompositeConstruct %v3float %799 %800 %801
+ %803 = OpLoad %int %p
OpStore %p %int_0
- OpStore %p %800
- %801 = OpCompositeExtract %float %433 0
- %802 = OpCompositeExtract %float %619 0
- %803 = OpCompositeExtract %float %619 0
- %804 = OpCompositeConstruct %v3float %801 %802 %803
- %805 = OpAccessChain %_ptr_Function_int %stack %479
- %806 = OpLoad %int %805
- %807 = OpAccessChain %_ptr_Function_int %stack %479
- OpStore %807 %int_0
- %808 = OpAccessChain %_ptr_Function_int %stack %479
- OpStore %808 %806
- %809 = OpAccessChain %_ptr_Function_int %stack %529
- %810 = OpLoad %int %809
- %811 = OpAccessChain %_ptr_Function_int %stack %529
- OpStore %811 %int_0
- %812 = OpAccessChain %_ptr_Function_int %stack %529
- OpStore %812 %810
- %813 = OpCompositeExtract %float %487 0
- %814 = OpCompositeExtract %float %487 1
- %815 = OpCompositeConstruct %v2float %813 %814
- %816 = OpAccessChain %_ptr_Function_int %stack %788
- %818 = OpBitcast %uint %794
- %819 = OpIAdd %uint %uint_1 %818
- %817 = OpBitcast %int %819
- OpStore %816 %817
- %820 = OpLoad %_arr_int_uint_10 %stack
- OpStore %stack %99
- OpStore %stack %820
- %821 = OpLoad %int %top
- %822 = OpAccessChain %_ptr_Function_int %stack %559
- %823 = OpLoad %int %822
- %824 = OpAccessChain %_ptr_Function_int %stack %559
- OpStore %824 %int_0
- %825 = OpAccessChain %_ptr_Function_int %stack %559
- OpStore %825 %823
- %826 = OpCompositeExtract %float %499 1
- %827 = OpCompositeExtract %float %799 1
- %828 = OpCompositeConstruct %v2float %826 %827
- %829 = OpLoad %_arr_int_uint_10 %stack
- OpStore %stack %99
- OpStore %stack %829
- %830 = OpBitcast %int %uint_1
- %831 = OpIAdd %int %821 %830
- %832 = OpAccessChain %_ptr_Function_int %stack %788
- %833 = OpLoad %int %832
- %834 = OpAccessChain %_ptr_Function_int %stack %788
- OpStore %834 %int_0
- %835 = OpAccessChain %_ptr_Function_int %stack %788
- OpStore %835 %833
- OpStore %top %831
- %836 = OpLoad %int %param_4
+ OpStore %p %803
+ %804 = OpCompositeExtract %float %436 0
+ %805 = OpCompositeExtract %float %622 0
+ %806 = OpCompositeExtract %float %622 0
+ %807 = OpCompositeConstruct %v3float %804 %805 %806
+ %808 = OpAccessChain %_ptr_Function_int %stack %482
+ %809 = OpLoad %int %808
+ %810 = OpAccessChain %_ptr_Function_int %stack %482
+ OpStore %810 %int_0
+ %811 = OpAccessChain %_ptr_Function_int %stack %482
+ OpStore %811 %809
+ %812 = OpAccessChain %_ptr_Function_int %stack %532
+ %813 = OpLoad %int %812
+ %814 = OpAccessChain %_ptr_Function_int %stack %532
+ OpStore %814 %int_0
+ %815 = OpAccessChain %_ptr_Function_int %stack %532
+ OpStore %815 %813
+ %816 = OpCompositeExtract %float %490 0
+ %817 = OpCompositeExtract %float %490 1
+ %818 = OpCompositeConstruct %v2float %816 %817
+ %819 = OpAccessChain %_ptr_Function_int %stack %791
+ %821 = OpBitcast %uint %797
+ %822 = OpIAdd %uint %uint_1 %821
+ %820 = OpBitcast %int %822
+ OpStore %819 %820
+ %823 = OpLoad %_arr_int_uint_10 %stack
+ OpStore %stack %102
+ OpStore %stack %823
+ %824 = OpLoad %int %top
+ %825 = OpAccessChain %_ptr_Function_int %stack %562
+ %826 = OpLoad %int %825
+ %827 = OpAccessChain %_ptr_Function_int %stack %562
+ OpStore %827 %int_0
+ %828 = OpAccessChain %_ptr_Function_int %stack %562
+ OpStore %828 %826
+ %829 = OpCompositeExtract %float %502 1
+ %830 = OpCompositeExtract %float %802 1
+ %831 = OpCompositeConstruct %v2float %829 %830
+ %832 = OpLoad %_arr_int_uint_10 %stack
+ OpStore %stack %102
+ OpStore %stack %832
+ %833 = OpBitcast %int %uint_1
+ %834 = OpIAdd %int %824 %833
+ %835 = OpAccessChain %_ptr_Function_int %stack %791
+ %836 = OpLoad %int %835
+ %837 = OpAccessChain %_ptr_Function_int %stack %791
+ OpStore %837 %int_0
+ %838 = OpAccessChain %_ptr_Function_int %stack %791
+ OpStore %838 %836
+ OpStore %top %834
+ %839 = OpLoad %int %param_4
OpStore %param_4 %int_0
- OpStore %param_4 %836
- %837 = OpLoad %int %h_1
- %838 = OpAccessChain %_ptr_Function_int %stack %479
- %839 = OpLoad %int %838
- %840 = OpAccessChain %_ptr_Function_int %stack %479
- OpStore %840 %int_0
- %841 = OpAccessChain %_ptr_Function_int %stack %479
- OpStore %841 %839
- %842 = OpAccessChain %_ptr_Function_int %stack %443
- %843 = OpLoad %int %842
- %844 = OpAccessChain %_ptr_Function_int %stack %443
- OpStore %844 %int_0
- %845 = OpAccessChain %_ptr_Function_int %stack %443
- OpStore %845 %843
- %846 = OpAccessChain %_ptr_Function_int %stack %831
- OpStore %846 %837
- %847 = OpAccessChain %_ptr_Function_int %stack %559
- %848 = OpLoad %int %847
- %849 = OpAccessChain %_ptr_Function_int %stack %559
- OpStore %849 %int_0
- %850 = OpAccessChain %_ptr_Function_int %stack %559
- OpStore %850 %848
- %851 = OpCompositeExtract %float %527 1
- %852 = OpCompositeExtract %float %494 0
- %853 = OpCompositeExtract %float %494 0
- %854 = OpCompositeConstruct %v3float %851 %852 %853
- %855 = OpLoad %int %l_1
+ OpStore %param_4 %839
+ %840 = OpLoad %int %h_1
+ %841 = OpAccessChain %_ptr_Function_int %stack %482
+ %842 = OpLoad %int %841
+ %843 = OpAccessChain %_ptr_Function_int %stack %482
+ OpStore %843 %int_0
+ %844 = OpAccessChain %_ptr_Function_int %stack %482
+ OpStore %844 %842
+ %845 = OpAccessChain %_ptr_Function_int %stack %446
+ %846 = OpLoad %int %845
+ %847 = OpAccessChain %_ptr_Function_int %stack %446
+ OpStore %847 %int_0
+ %848 = OpAccessChain %_ptr_Function_int %stack %446
+ OpStore %848 %846
+ %849 = OpAccessChain %_ptr_Function_int %stack %834
+ OpStore %849 %840
+ %850 = OpAccessChain %_ptr_Function_int %stack %562
+ %851 = OpLoad %int %850
+ %852 = OpAccessChain %_ptr_Function_int %stack %562
+ OpStore %852 %int_0
+ %853 = OpAccessChain %_ptr_Function_int %stack %562
+ OpStore %853 %851
+ %854 = OpCompositeExtract %float %530 1
+ %855 = OpCompositeExtract %float %497 0
+ %856 = OpCompositeExtract %float %497 0
+ %857 = OpCompositeConstruct %v3float %854 %855 %856
+ %858 = OpLoad %int %l_1
OpStore %l_1 %int_0
- OpStore %l_1 %855
- OpBranch %769
- %769 = OpLabel
- %856 = OpAccessChain %_ptr_Function_int %stack %479
- %857 = OpLoad %int %856
- %858 = OpAccessChain %_ptr_Function_int %stack %479
- OpStore %858 %int_0
- %859 = OpAccessChain %_ptr_Function_int %stack %479
- OpStore %859 %857
- OpBranch %504
- %504 = OpLabel
- %860 = OpLoad %int %l_1
+ OpStore %l_1 %858
+ OpBranch %772
+ %772 = OpLabel
+ %859 = OpAccessChain %_ptr_Function_int %stack %482
+ %860 = OpLoad %int %859
+ %861 = OpAccessChain %_ptr_Function_int %stack %482
+ OpStore %861 %int_0
+ %862 = OpAccessChain %_ptr_Function_int %stack %482
+ OpStore %862 %860
+ OpBranch %507
+ %507 = OpLabel
+ %863 = OpLoad %int %l_1
OpStore %l_1 %int_0
- OpStore %l_1 %860
- %861 = OpCompositeExtract %float %487 2
- %862 = OpCompositeExtract %float %494 0
- %863 = OpCompositeConstruct %v2float %861 %862
- %864 = OpLoad %QuicksortObject %obj
- OpStore %obj %100
- OpStore %obj %864
- OpBranch %502
- %503 = OpLabel
- %865 = OpLoad %int %h_1
+ OpStore %l_1 %863
+ %864 = OpCompositeExtract %float %490 2
+ %865 = OpCompositeExtract %float %497 0
+ %866 = OpCompositeConstruct %v2float %864 %865
+ %867 = OpLoad %QuicksortObject %obj
+ OpStore %obj %103
+ OpStore %obj %867
+ OpBranch %505
+ %506 = OpLabel
+ %868 = OpLoad %int %h_1
OpStore %h_1 %int_0
- OpStore %h_1 %865
+ OpStore %h_1 %868
OpReturn
OpFunctionEnd
- %main = OpFunction %void None %416
- %867 = OpLabel
- %color = OpVariable %_ptr_Function_v3float Function %168
- %i_2 = OpVariable %_ptr_Function_int Function %28
- %uv = OpVariable %_ptr_Function_v2float Function %165
- %871 = OpLoad %v2float %uv
- OpStore %uv %873
- OpStore %uv %871
+ %main_1 = OpFunction %void None %419
+ %870 = OpLabel
+ %color = OpVariable %_ptr_Function_v3float Function %171
+ %i_2 = OpVariable %_ptr_Function_int Function %31
+ %uv = OpVariable %_ptr_Function_v2float Function %168
+ %874 = OpLoad %v2float %uv
+ OpStore %uv %876
+ OpStore %uv %874
OpStore %i_2 %int_0
- %874 = OpLoad %QuicksortObject %obj
- OpStore %obj %100
- OpStore %obj %874
- OpSelectionMerge %876 None
- OpBranchConditional %true %877 %876
- %877 = OpLabel
- %878 = OpLoad %QuicksortObject %obj
- OpStore %obj %100
- OpStore %obj %878
- %879 = OpCompositeExtract %float %35 0
- %880 = OpCompositeExtract %float %35 0
- %881 = OpCompositeConstruct %v2float %879 %880
- %882 = OpLoad %int %i_2
- %883 = OpLoad %v2float %uv
- OpStore %uv %873
- OpStore %uv %883
- %884 = OpLoad %v3float %color
- OpStore %color %885
- OpStore %color %884
- %886 = OpCompositeExtract %float %881 1
- %887 = OpCompositeExtract %float %881 1
- %888 = OpCompositeConstruct %v2float %886 %887
- %889 = OpLoad %QuicksortObject %obj
- OpStore %obj %100
- OpStore %obj %889
- OpBranch %876
- %876 = OpLabel
- %890 = OpLoad %QuicksortObject %obj
- OpStore %obj %100
- OpStore %obj %890
- %891 = OpCompositeExtract %float %873 0
- %892 = OpCompositeExtract %float %873 0
- %893 = OpCompositeConstruct %v2float %891 %892
- %894 = OpLoad %int %i_2
+ %877 = OpLoad %QuicksortObject %obj
+ OpStore %obj %103
+ OpStore %obj %877
+ OpSelectionMerge %879 None
+ OpBranchConditional %true %880 %879
+ %880 = OpLabel
+ %881 = OpLoad %QuicksortObject %obj
+ OpStore %obj %103
+ OpStore %obj %881
+ %882 = OpCompositeExtract %float %38 0
+ %883 = OpCompositeExtract %float %38 0
+ %884 = OpCompositeConstruct %v2float %882 %883
+ %885 = OpLoad %int %i_2
+ %886 = OpLoad %v2float %uv
+ OpStore %uv %876
+ OpStore %uv %886
+ %887 = OpLoad %v3float %color
+ OpStore %color %888
+ OpStore %color %887
+ %889 = OpCompositeExtract %float %884 1
+ %890 = OpCompositeExtract %float %884 1
+ %891 = OpCompositeConstruct %v2float %889 %890
+ %892 = OpLoad %QuicksortObject %obj
+ OpStore %obj %103
+ OpStore %obj %892
+ OpBranch %879
+ %879 = OpLabel
+ %893 = OpLoad %QuicksortObject %obj
+ OpStore %obj %103
+ OpStore %obj %893
+ %894 = OpCompositeExtract %float %876 0
+ %895 = OpCompositeExtract %float %876 0
+ %896 = OpCompositeConstruct %v2float %894 %895
+ %897 = OpLoad %int %i_2
OpStore %i_2 %int_0
- OpStore %i_2 %894
- %895 = OpFunctionCall %void %quicksort_
- %896 = OpLoad %QuicksortObject %obj
- OpStore %obj %100
- OpStore %obj %896
- %897 = OpLoad %v4float %gl_FragCoord
- %898 = OpLoad %v2float %uv
- OpStore %uv %873
- OpStore %uv %898
- %899 = OpCompositeExtract %float %873 1
- %900 = OpCompositeExtract %float %873 1
- %901 = OpCompositeConstruct %v2float %899 %900
- %902 = OpLoad %v2float %uv
- OpStore %uv %873
- OpStore %uv %902
- %903 = OpCompositeExtract %float %897 0
- %904 = OpCompositeExtract %float %897 1
- %905 = OpCompositeConstruct %v2float %903 %904
- %906 = OpCompositeExtract %float %905 1
- %907 = OpCompositeExtract %float %893 1
- %908 = OpCompositeExtract %float %893 1
- %909 = OpCompositeConstruct %v3float %906 %907 %908
- %910 = OpLoad %QuicksortObject %obj
- OpStore %obj %100
- OpStore %obj %910
- %911 = OpLoad %v2float %uv
- OpStore %uv %873
- OpStore %uv %911
- %913 = OpAccessChain %_ptr_Uniform_v2float %x_188 %uint_0
- %914 = OpLoad %v2float %913
- %915 = OpLoad %QuicksortObject %obj
- OpStore %obj %100
- OpStore %obj %915
- %916 = OpCompositeExtract %float %897 1
- %917 = OpCompositeExtract %float %35 2
- %918 = OpCompositeExtract %float %897 3
- %919 = OpCompositeConstruct %v3float %916 %917 %918
- %920 = OpLoad %v3float %color
- OpStore %color %885
- OpStore %color %920
- %921 = OpFDiv %v2float %905 %914
- %922 = OpLoad %QuicksortObject %obj
- OpStore %obj %100
- OpStore %obj %922
- %923 = OpCompositeExtract %float %901 0
- %924 = OpCompositeExtract %float %905 1
- %925 = OpCompositeConstruct %v2float %923 %924
- %926 = OpLoad %v3float %color
- OpStore %color %885
- %927 = OpLoad %v3float %color
- OpStore %color %885
- OpStore %color %927
- OpStore %color %926
- OpStore %uv %921
- OpStore %color %35
- %928 = OpLoad %v3float %color
- OpStore %color %885
- OpStore %color %928
- %929 = OpCompositeExtract %float %905 0
- %930 = OpCompositeExtract %float %905 1
- %931 = OpCompositeExtract %float %893 1
- %932 = OpCompositeConstruct %v3float %929 %930 %931
- %933 = OpLoad %QuicksortObject %obj
- OpStore %obj %100
- OpStore %obj %933
- %934 = OpAccessChain %_ptr_Private_int %obj %uint_0 %uint_0
- %935 = OpLoad %int %934
- %936 = OpAccessChain %_ptr_Private_int %obj %uint_0 %uint_0
- OpStore %936 %int_0
+ OpStore %i_2 %897
+ %898 = OpFunctionCall %void %quicksort_
+ %899 = OpLoad %QuicksortObject %obj
+ OpStore %obj %103
+ OpStore %obj %899
+ %900 = OpLoad %v4float %gl_FragCoord
+ %901 = OpLoad %v2float %uv
+ OpStore %uv %876
+ OpStore %uv %901
+ %902 = OpCompositeExtract %float %876 1
+ %903 = OpCompositeExtract %float %876 1
+ %904 = OpCompositeConstruct %v2float %902 %903
+ %905 = OpLoad %v2float %uv
+ OpStore %uv %876
+ OpStore %uv %905
+ %906 = OpCompositeExtract %float %900 0
+ %907 = OpCompositeExtract %float %900 1
+ %908 = OpCompositeConstruct %v2float %906 %907
+ %909 = OpCompositeExtract %float %908 1
+ %910 = OpCompositeExtract %float %896 1
+ %911 = OpCompositeExtract %float %896 1
+ %912 = OpCompositeConstruct %v3float %909 %910 %911
+ %913 = OpLoad %QuicksortObject %obj
+ OpStore %obj %103
+ OpStore %obj %913
+ %914 = OpLoad %v2float %uv
+ OpStore %uv %876
+ OpStore %uv %914
+ %916 = OpAccessChain %_ptr_Uniform_v2float %x_188 %uint_0
+ %917 = OpLoad %v2float %916
+ %918 = OpLoad %QuicksortObject %obj
+ OpStore %obj %103
+ OpStore %obj %918
+ %919 = OpCompositeExtract %float %900 1
+ %920 = OpCompositeExtract %float %38 2
+ %921 = OpCompositeExtract %float %900 3
+ %922 = OpCompositeConstruct %v3float %919 %920 %921
+ %923 = OpLoad %v3float %color
+ OpStore %color %888
+ OpStore %color %923
+ %924 = OpFDiv %v2float %908 %917
+ %925 = OpLoad %QuicksortObject %obj
+ OpStore %obj %103
+ OpStore %obj %925
+ %926 = OpCompositeExtract %float %904 0
+ %927 = OpCompositeExtract %float %908 1
+ %928 = OpCompositeConstruct %v2float %926 %927
+ %929 = OpLoad %v3float %color
+ OpStore %color %888
+ %930 = OpLoad %v3float %color
+ OpStore %color %888
+ OpStore %color %930
+ OpStore %color %929
+ OpStore %uv %924
+ OpStore %color %38
+ %931 = OpLoad %v3float %color
+ OpStore %color %888
+ OpStore %color %931
+ %932 = OpCompositeExtract %float %908 0
+ %933 = OpCompositeExtract %float %908 1
+ %934 = OpCompositeExtract %float %896 1
+ %935 = OpCompositeConstruct %v3float %932 %933 %934
+ %936 = OpLoad %QuicksortObject %obj
+ OpStore %obj %103
+ OpStore %obj %936
%937 = OpAccessChain %_ptr_Private_int %obj %uint_0 %uint_0
- OpStore %937 %935
- %938 = OpAccessChain %_ptr_Private_int %obj %uint_0 %uint_0
- %939 = OpLoad %int %938
- %940 = OpLoad %QuicksortObject %obj
- OpStore %obj %100
- OpStore %obj %940
+ %938 = OpLoad %int %937
+ %939 = OpAccessChain %_ptr_Private_int %obj %uint_0 %uint_0
+ OpStore %939 %int_0
+ %940 = OpAccessChain %_ptr_Private_int %obj %uint_0 %uint_0
+ OpStore %940 %938
%941 = OpAccessChain %_ptr_Private_int %obj %uint_0 %uint_0
%942 = OpLoad %int %941
- %943 = OpAccessChain %_ptr_Private_int %obj %uint_0 %uint_0
- OpStore %943 %int_0
+ %943 = OpLoad %QuicksortObject %obj
+ OpStore %obj %103
+ OpStore %obj %943
%944 = OpAccessChain %_ptr_Private_int %obj %uint_0 %uint_0
- OpStore %944 %942
- %945 = OpAccessChain %_ptr_Function_float %color %uint_0
- %946 = OpLoad %float %945
- %947 = OpAccessChain %_ptr_Function_float %color %uint_0
- %948 = OpLoad %float %947
- %949 = OpAccessChain %_ptr_Function_float %color %uint_0
- OpStore %949 %float_0
+ %945 = OpLoad %int %944
+ %946 = OpAccessChain %_ptr_Private_int %obj %uint_0 %uint_0
+ OpStore %946 %int_0
+ %947 = OpAccessChain %_ptr_Private_int %obj %uint_0 %uint_0
+ OpStore %947 %945
+ %948 = OpAccessChain %_ptr_Function_float %color %uint_0
+ %949 = OpLoad %float %948
%950 = OpAccessChain %_ptr_Function_float %color %uint_0
- OpStore %950 %948
- %951 = OpCompositeExtract %float %35 2
- %952 = OpCompositeExtract %float %35 1
- %953 = OpCompositeConstruct %v2float %951 %952
- %954 = OpLoad %int %i_2
+ %951 = OpLoad %float %950
+ %952 = OpAccessChain %_ptr_Function_float %color %uint_0
+ OpStore %952 %float_0
+ %953 = OpAccessChain %_ptr_Function_float %color %uint_0
+ OpStore %953 %951
+ %954 = OpCompositeExtract %float %38 2
+ %955 = OpCompositeExtract %float %38 1
+ %956 = OpCompositeConstruct %v2float %954 %955
+ %957 = OpLoad %int %i_2
OpStore %i_2 %int_0
- OpStore %i_2 %954
- %955 = OpLoad %QuicksortObject %obj
- OpStore %obj %100
- OpStore %obj %955
- %956 = OpCompositeExtract %float %932 0
- %957 = OpCompositeExtract %float %925 0
- %958 = OpCompositeExtract %float %925 1
- %959 = OpCompositeConstruct %v3float %956 %957 %958
- %960 = OpAccessChain %_ptr_Function_float %color %uint_0
- %961 = OpConvertSToF %float %939
- %962 = OpFAdd %float %946 %961
- OpStore %960 %962
- %963 = OpLoad %v2float %uv
- OpStore %uv %873
- OpStore %uv %963
- %964 = OpLoad %v2float %uv
- OpStore %uv %873
- OpStore %uv %964
- %965 = OpCompositeExtract %float %897 1
- %966 = OpCompositeExtract %float %897 1
- %967 = OpCompositeConstruct %v2float %965 %966
- %968 = OpAccessChain %_ptr_Function_float %uv %uint_0
- %969 = OpLoad %float %968
- %970 = OpCompositeExtract %float %921 1
- %971 = OpCompositeExtract %float %921 0
- %972 = OpCompositeConstruct %v2float %970 %971
- %973 = OpAccessChain %_ptr_Function_float %uv %uint_0
- %974 = OpLoad %float %973
- %975 = OpAccessChain %_ptr_Function_float %uv %uint_0
- OpStore %975 %float_0
+ OpStore %i_2 %957
+ %958 = OpLoad %QuicksortObject %obj
+ OpStore %obj %103
+ OpStore %obj %958
+ %959 = OpCompositeExtract %float %935 0
+ %960 = OpCompositeExtract %float %928 0
+ %961 = OpCompositeExtract %float %928 1
+ %962 = OpCompositeConstruct %v3float %959 %960 %961
+ %963 = OpAccessChain %_ptr_Function_float %color %uint_0
+ %964 = OpConvertSToF %float %942
+ %965 = OpFAdd %float %949 %964
+ OpStore %963 %965
+ %966 = OpLoad %v2float %uv
+ OpStore %uv %876
+ OpStore %uv %966
+ %967 = OpLoad %v2float %uv
+ OpStore %uv %876
+ OpStore %uv %967
+ %968 = OpCompositeExtract %float %900 1
+ %969 = OpCompositeExtract %float %900 1
+ %970 = OpCompositeConstruct %v2float %968 %969
+ %971 = OpAccessChain %_ptr_Function_float %uv %uint_0
+ %972 = OpLoad %float %971
+ %973 = OpCompositeExtract %float %924 1
+ %974 = OpCompositeExtract %float %924 0
+ %975 = OpCompositeConstruct %v2float %973 %974
%976 = OpAccessChain %_ptr_Function_float %uv %uint_0
- OpStore %976 %974
- %977 = OpLoad %QuicksortObject %obj
- OpStore %obj %100
- OpStore %obj %977
- %979 = OpFOrdGreaterThan %bool %969 %float_0_25
- OpSelectionMerge %980 None
- OpBranchConditional %979 %981 %980
- %981 = OpLabel
- %982 = OpLoad %int %i_2
+ %977 = OpLoad %float %976
+ %978 = OpAccessChain %_ptr_Function_float %uv %uint_0
+ OpStore %978 %float_0
+ %979 = OpAccessChain %_ptr_Function_float %uv %uint_0
+ OpStore %979 %977
+ %980 = OpLoad %QuicksortObject %obj
+ OpStore %obj %103
+ OpStore %obj %980
+ %982 = OpFOrdGreaterThan %bool %972 %float_0_25
+ OpSelectionMerge %983 None
+ OpBranchConditional %982 %984 %983
+ %984 = OpLabel
+ %985 = OpLoad %int %i_2
OpStore %i_2 %int_0
- OpStore %i_2 %982
- %983 = OpAccessChain %_ptr_Private_int %obj %uint_0 %uint_0
- %984 = OpLoad %int %983
- %985 = OpAccessChain %_ptr_Private_int %obj %uint_0 %uint_0
- OpStore %985 %int_0
+ OpStore %i_2 %985
%986 = OpAccessChain %_ptr_Private_int %obj %uint_0 %uint_0
- OpStore %986 %984
- %987 = OpCompositeExtract %float %873 1
- %988 = OpCompositeExtract %float %909 1
- %989 = OpCompositeExtract %float %909 1
- %990 = OpCompositeConstruct %v3float %987 %988 %989
- %991 = OpAccessChain %_ptr_Function_float %uv %uint_0
- %992 = OpLoad %float %991
- %993 = OpAccessChain %_ptr_Function_float %uv %uint_0
- OpStore %993 %float_0
+ %987 = OpLoad %int %986
+ %988 = OpAccessChain %_ptr_Private_int %obj %uint_0 %uint_0
+ OpStore %988 %int_0
+ %989 = OpAccessChain %_ptr_Private_int %obj %uint_0 %uint_0
+ OpStore %989 %987
+ %990 = OpCompositeExtract %float %876 1
+ %991 = OpCompositeExtract %float %912 1
+ %992 = OpCompositeExtract %float %912 1
+ %993 = OpCompositeConstruct %v3float %990 %991 %992
%994 = OpAccessChain %_ptr_Function_float %uv %uint_0
- OpStore %994 %992
- %995 = OpAccessChain %_ptr_Private_int %obj %uint_0 %int_1
- %996 = OpLoad %int %995
- %997 = OpLoad %QuicksortObject %obj
- OpStore %obj %100
- OpStore %obj %997
- %998 = OpCompositeExtract %float %967 0
- %999 = OpCompositeExtract %float %967 0
- %1000 = OpCompositeConstruct %v2float %998 %999
- %1001 = OpLoad %v2float %uv
- OpStore %uv %873
- OpStore %uv %1001
- %1002 = OpLoad %QuicksortObject %obj
- OpStore %obj %100
- OpStore %obj %1002
- %1003 = OpCompositeExtract %float %35 2
- %1004 = OpCompositeExtract %float %873 1
- %1005 = OpCompositeConstruct %v2float %1003 %1004
- %1006 = OpLoad %int %i_2
+ %995 = OpLoad %float %994
+ %996 = OpAccessChain %_ptr_Function_float %uv %uint_0
+ OpStore %996 %float_0
+ %997 = OpAccessChain %_ptr_Function_float %uv %uint_0
+ OpStore %997 %995
+ %998 = OpAccessChain %_ptr_Private_int %obj %uint_0 %int_1
+ %999 = OpLoad %int %998
+ %1000 = OpLoad %QuicksortObject %obj
+ OpStore %obj %103
+ OpStore %obj %1000
+ %1001 = OpCompositeExtract %float %970 0
+ %1002 = OpCompositeExtract %float %970 0
+ %1003 = OpCompositeConstruct %v2float %1001 %1002
+ %1004 = OpLoad %v2float %uv
+ OpStore %uv %876
+ OpStore %uv %1004
+ %1005 = OpLoad %QuicksortObject %obj
+ OpStore %obj %103
+ OpStore %obj %1005
+ %1006 = OpCompositeExtract %float %38 2
+ %1007 = OpCompositeExtract %float %876 1
+ %1008 = OpCompositeConstruct %v2float %1006 %1007
+ %1009 = OpLoad %int %i_2
OpStore %i_2 %int_0
- OpStore %i_2 %1006
- %1007 = OpAccessChain %_ptr_Function_float %color %int_0
- %1008 = OpLoad %float %1007
- %1009 = OpAccessChain %_ptr_Function_float %color %int_0
- %1010 = OpLoad %float %1009
- %1011 = OpAccessChain %_ptr_Function_float %color %int_0
- OpStore %1011 %float_0
+ OpStore %i_2 %1009
+ %1010 = OpAccessChain %_ptr_Function_float %color %int_0
+ %1011 = OpLoad %float %1010
%1012 = OpAccessChain %_ptr_Function_float %color %int_0
- OpStore %1012 %1010
- %1013 = OpLoad %v3float %color
- OpStore %color %885
- OpStore %color %1013
- %1014 = OpLoad %v3float %color
- OpStore %color %885
- OpStore %color %1014
- %1015 = OpCompositeExtract %float %967 1
- %1016 = OpCompositeExtract %float %967 1
- %1017 = OpCompositeExtract %float %901 1
- %1018 = OpCompositeConstruct %v3float %1015 %1016 %1017
- %1019 = OpAccessChain %_ptr_Function_float %color %int_0
- %1020 = OpLoad %float %1019
- %1021 = OpAccessChain %_ptr_Function_float %color %int_0
- OpStore %1021 %float_0
+ %1013 = OpLoad %float %1012
+ %1014 = OpAccessChain %_ptr_Function_float %color %int_0
+ OpStore %1014 %float_0
+ %1015 = OpAccessChain %_ptr_Function_float %color %int_0
+ OpStore %1015 %1013
+ %1016 = OpLoad %v3float %color
+ OpStore %color %888
+ OpStore %color %1016
+ %1017 = OpLoad %v3float %color
+ OpStore %color %888
+ OpStore %color %1017
+ %1018 = OpCompositeExtract %float %970 1
+ %1019 = OpCompositeExtract %float %970 1
+ %1020 = OpCompositeExtract %float %904 1
+ %1021 = OpCompositeConstruct %v3float %1018 %1019 %1020
%1022 = OpAccessChain %_ptr_Function_float %color %int_0
- OpStore %1022 %1020
- %1023 = OpAccessChain %_ptr_Function_float %color %uint_0
- %1024 = OpConvertSToF %float %996
- %1025 = OpFAdd %float %1024 %1008
- OpStore %1023 %1025
- %1026 = OpAccessChain %_ptr_Private_int %obj %uint_0 %uint_0
- %1027 = OpLoad %int %1026
- %1028 = OpAccessChain %_ptr_Private_int %obj %uint_0 %uint_0
- OpStore %1028 %int_0
+ %1023 = OpLoad %float %1022
+ %1024 = OpAccessChain %_ptr_Function_float %color %int_0
+ OpStore %1024 %float_0
+ %1025 = OpAccessChain %_ptr_Function_float %color %int_0
+ OpStore %1025 %1023
+ %1026 = OpAccessChain %_ptr_Function_float %color %uint_0
+ %1027 = OpConvertSToF %float %999
+ %1028 = OpFAdd %float %1027 %1011
+ OpStore %1026 %1028
%1029 = OpAccessChain %_ptr_Private_int %obj %uint_0 %uint_0
- OpStore %1029 %1027
- OpBranch %980
- %980 = OpLabel
- %1030 = OpAccessChain %_ptr_Function_float %uv %uint_0
- %1031 = OpLoad %float %1030
- %1032 = OpAccessChain %_ptr_Function_float %uv %uint_0
- OpStore %1032 %float_0
+ %1030 = OpLoad %int %1029
+ %1031 = OpAccessChain %_ptr_Private_int %obj %uint_0 %uint_0
+ OpStore %1031 %int_0
+ %1032 = OpAccessChain %_ptr_Private_int %obj %uint_0 %uint_0
+ OpStore %1032 %1030
+ OpBranch %983
+ %983 = OpLabel
%1033 = OpAccessChain %_ptr_Function_float %uv %uint_0
- OpStore %1033 %1031
- %1034 = OpAccessChain %_ptr_Function_float %uv %uint_0
- %1035 = OpLoad %float %1034
+ %1034 = OpLoad %float %1033
+ %1035 = OpAccessChain %_ptr_Function_float %uv %uint_0
+ OpStore %1035 %float_0
%1036 = OpAccessChain %_ptr_Function_float %uv %uint_0
- OpStore %1036 %float_0
+ OpStore %1036 %1034
%1037 = OpAccessChain %_ptr_Function_float %uv %uint_0
- OpStore %1037 %1035
- %1038 = OpAccessChain %_ptr_Function_float %uv %uint_0
- %1039 = OpLoad %float %1038
+ %1038 = OpLoad %float %1037
+ %1039 = OpAccessChain %_ptr_Function_float %uv %uint_0
+ OpStore %1039 %float_0
%1040 = OpAccessChain %_ptr_Function_float %uv %uint_0
- %1041 = OpLoad %float %1040
- %1042 = OpAccessChain %_ptr_Function_float %uv %uint_0
- OpStore %1042 %float_0
+ OpStore %1040 %1038
+ %1041 = OpAccessChain %_ptr_Function_float %uv %uint_0
+ %1042 = OpLoad %float %1041
%1043 = OpAccessChain %_ptr_Function_float %uv %uint_0
- OpStore %1043 %1041
- %1044 = OpCompositeExtract %float %959 2
- %1045 = OpCompositeExtract %float %959 1
- %1046 = OpCompositeExtract %float %959 1
- %1047 = OpCompositeConstruct %v3float %1044 %1045 %1046
- %1048 = OpLoad %v2float %uv
- OpStore %uv %873
- OpStore %uv %1048
- %1049 = OpAccessChain %_ptr_Function_float %uv %uint_0
- %1050 = OpLoad %float %1049
- %1051 = OpAccessChain %_ptr_Function_float %uv %uint_0
- OpStore %1051 %float_0
+ %1044 = OpLoad %float %1043
+ %1045 = OpAccessChain %_ptr_Function_float %uv %uint_0
+ OpStore %1045 %float_0
+ %1046 = OpAccessChain %_ptr_Function_float %uv %uint_0
+ OpStore %1046 %1044
+ %1047 = OpCompositeExtract %float %962 2
+ %1048 = OpCompositeExtract %float %962 1
+ %1049 = OpCompositeExtract %float %962 1
+ %1050 = OpCompositeConstruct %v3float %1047 %1048 %1049
+ %1051 = OpLoad %v2float %uv
+ OpStore %uv %876
+ OpStore %uv %1051
%1052 = OpAccessChain %_ptr_Function_float %uv %uint_0
- OpStore %1052 %1050
- %1053 = OpCompositeExtract %float %873 1
- %1054 = OpCompositeExtract %float %873 1
- %1055 = OpCompositeConstruct %v2float %1053 %1054
- %1056 = OpAccessChain %_ptr_Function_float %uv %uint_0
- %1057 = OpLoad %float %1056
- %1058 = OpAccessChain %_ptr_Function_float %uv %uint_0
- OpStore %1058 %float_0
+ %1053 = OpLoad %float %1052
+ %1054 = OpAccessChain %_ptr_Function_float %uv %uint_0
+ OpStore %1054 %float_0
+ %1055 = OpAccessChain %_ptr_Function_float %uv %uint_0
+ OpStore %1055 %1053
+ %1056 = OpCompositeExtract %float %876 1
+ %1057 = OpCompositeExtract %float %876 1
+ %1058 = OpCompositeConstruct %v2float %1056 %1057
%1059 = OpAccessChain %_ptr_Function_float %uv %uint_0
- OpStore %1059 %1057
- %1061 = OpFOrdGreaterThan %bool %1039 %float_0_5
- OpSelectionMerge %1062 None
- OpBranchConditional %1061 %1063 %1062
- %1063 = OpLabel
- %1064 = OpAccessChain %_ptr_Function_float %uv %uint_0
- %1065 = OpLoad %float %1064
- %1066 = OpAccessChain %_ptr_Function_float %uv %uint_0
- OpStore %1066 %float_0
+ %1060 = OpLoad %float %1059
+ %1061 = OpAccessChain %_ptr_Function_float %uv %uint_0
+ OpStore %1061 %float_0
+ %1062 = OpAccessChain %_ptr_Function_float %uv %uint_0
+ OpStore %1062 %1060
+ %1064 = OpFOrdGreaterThan %bool %1042 %float_0_5
+ OpSelectionMerge %1065 None
+ OpBranchConditional %1064 %1066 %1065
+ %1066 = OpLabel
%1067 = OpAccessChain %_ptr_Function_float %uv %uint_0
- OpStore %1067 %1065
- %1068 = OpCompositeExtract %float %893 0
- %1069 = OpCompositeExtract %float %893 0
- %1070 = OpCompositeConstruct %v2float %1068 %1069
- %1071 = OpAccessChain %_ptr_Function_float %color %uint_0
- %1072 = OpLoad %float %1071
- %1073 = OpAccessChain %_ptr_Function_float %color %uint_0
- OpStore %1073 %float_0
+ %1068 = OpLoad %float %1067
+ %1069 = OpAccessChain %_ptr_Function_float %uv %uint_0
+ OpStore %1069 %float_0
+ %1070 = OpAccessChain %_ptr_Function_float %uv %uint_0
+ OpStore %1070 %1068
+ %1071 = OpCompositeExtract %float %896 0
+ %1072 = OpCompositeExtract %float %896 0
+ %1073 = OpCompositeConstruct %v2float %1071 %1072
%1074 = OpAccessChain %_ptr_Function_float %color %uint_0
- OpStore %1074 %1072
- %1075 = OpAccessChain %_ptr_Function_float %color %uint_0
- %1076 = OpLoad %float %1075
+ %1075 = OpLoad %float %1074
+ %1076 = OpAccessChain %_ptr_Function_float %color %uint_0
+ OpStore %1076 %float_0
%1077 = OpAccessChain %_ptr_Function_float %color %uint_0
- OpStore %1077 %float_0
+ OpStore %1077 %1075
%1078 = OpAccessChain %_ptr_Function_float %color %uint_0
- OpStore %1078 %1076
- %1079 = OpCompositeExtract %float %959 0
- %1080 = OpCompositeExtract %float %959 2
- %1081 = OpCompositeExtract %float %1055 1
- %1082 = OpCompositeConstruct %v3float %1079 %1080 %1081
- %1083 = OpAccessChain %_ptr_Function_float %color %uint_0
- %1084 = OpLoad %float %1083
- %1085 = OpAccessChain %_ptr_Function_float %color %uint_0
- OpStore %1085 %float_0
+ %1079 = OpLoad %float %1078
+ %1080 = OpAccessChain %_ptr_Function_float %color %uint_0
+ OpStore %1080 %float_0
+ %1081 = OpAccessChain %_ptr_Function_float %color %uint_0
+ OpStore %1081 %1079
+ %1082 = OpCompositeExtract %float %962 0
+ %1083 = OpCompositeExtract %float %962 2
+ %1084 = OpCompositeExtract %float %1058 1
+ %1085 = OpCompositeConstruct %v3float %1082 %1083 %1084
%1086 = OpAccessChain %_ptr_Function_float %color %uint_0
- OpStore %1086 %1084
- %1088 = OpAccessChain %_ptr_Private_int %obj %uint_0 %uint_2
- %1089 = OpLoad %int %1088
- %1090 = OpAccessChain %_ptr_Function_float %uv %uint_0
- %1091 = OpLoad %float %1090
- %1092 = OpAccessChain %_ptr_Function_float %uv %uint_0
- OpStore %1092 %float_0
+ %1087 = OpLoad %float %1086
+ %1088 = OpAccessChain %_ptr_Function_float %color %uint_0
+ OpStore %1088 %float_0
+ %1089 = OpAccessChain %_ptr_Function_float %color %uint_0
+ OpStore %1089 %1087
+ %1091 = OpAccessChain %_ptr_Private_int %obj %uint_0 %uint_2
+ %1092 = OpLoad %int %1091
%1093 = OpAccessChain %_ptr_Function_float %uv %uint_0
- OpStore %1093 %1091
- %1094 = OpAccessChain %_ptr_Function_float %color %uint_0
- %1095 = OpLoad %float %1094
- %1096 = OpAccessChain %_ptr_Function_float %color %uint_0
- OpStore %1096 %float_0
+ %1094 = OpLoad %float %1093
+ %1095 = OpAccessChain %_ptr_Function_float %uv %uint_0
+ OpStore %1095 %float_0
+ %1096 = OpAccessChain %_ptr_Function_float %uv %uint_0
+ OpStore %1096 %1094
%1097 = OpAccessChain %_ptr_Function_float %color %uint_0
- OpStore %1097 %1095
- %1098 = OpAccessChain %_ptr_Private_int %obj %uint_0 %uint_2
- %1099 = OpLoad %int %1098
- %1100 = OpAccessChain %_ptr_Private_int %obj %uint_0 %uint_2
- OpStore %1100 %int_0
+ %1098 = OpLoad %float %1097
+ %1099 = OpAccessChain %_ptr_Function_float %color %uint_0
+ OpStore %1099 %float_0
+ %1100 = OpAccessChain %_ptr_Function_float %color %uint_0
+ OpStore %1100 %1098
%1101 = OpAccessChain %_ptr_Private_int %obj %uint_0 %uint_2
- OpStore %1101 %1099
- %1102 = OpCompositeExtract %float %925 1
- %1103 = OpCompositeExtract %float %914 0
- %1104 = OpCompositeConstruct %v2float %1102 %1103
- %1105 = OpAccessChain %_ptr_Function_float %color %uint_1
- %1106 = OpLoad %float %1105
- %1107 = OpAccessChain %_ptr_Function_float %color %uint_1
- OpStore %1107 %float_0
+ %1102 = OpLoad %int %1101
+ %1103 = OpAccessChain %_ptr_Private_int %obj %uint_0 %uint_2
+ OpStore %1103 %int_0
+ %1104 = OpAccessChain %_ptr_Private_int %obj %uint_0 %uint_2
+ OpStore %1104 %1102
+ %1105 = OpCompositeExtract %float %928 1
+ %1106 = OpCompositeExtract %float %917 0
+ %1107 = OpCompositeConstruct %v2float %1105 %1106
%1108 = OpAccessChain %_ptr_Function_float %color %uint_1
- OpStore %1108 %1106
- %1109 = OpAccessChain %_ptr_Function_float %color %uint_1
- %1110 = OpLoad %float %1109
- %1111 = OpAccessChain %_ptr_Private_int %obj %uint_0 %uint_2
- %1112 = OpLoad %int %1111
- %1113 = OpAccessChain %_ptr_Private_int %obj %uint_0 %uint_2
- OpStore %1113 %int_0
+ %1109 = OpLoad %float %1108
+ %1110 = OpAccessChain %_ptr_Function_float %color %uint_1
+ OpStore %1110 %float_0
+ %1111 = OpAccessChain %_ptr_Function_float %color %uint_1
+ OpStore %1111 %1109
+ %1112 = OpAccessChain %_ptr_Function_float %color %uint_1
+ %1113 = OpLoad %float %1112
%1114 = OpAccessChain %_ptr_Private_int %obj %uint_0 %uint_2
- OpStore %1114 %1112
- %1115 = OpCompositeExtract %float %1082 0
- %1116 = OpCompositeExtract %float %905 0
- %1117 = OpCompositeConstruct %v2float %1115 %1116
- %1118 = OpAccessChain %_ptr_Function_float %color %uint_0
- %1119 = OpLoad %float %1118
- %1120 = OpAccessChain %_ptr_Function_float %color %uint_0
- OpStore %1120 %float_0
+ %1115 = OpLoad %int %1114
+ %1116 = OpAccessChain %_ptr_Private_int %obj %uint_0 %uint_2
+ OpStore %1116 %int_0
+ %1117 = OpAccessChain %_ptr_Private_int %obj %uint_0 %uint_2
+ OpStore %1117 %1115
+ %1118 = OpCompositeExtract %float %1085 0
+ %1119 = OpCompositeExtract %float %908 0
+ %1120 = OpCompositeConstruct %v2float %1118 %1119
%1121 = OpAccessChain %_ptr_Function_float %color %uint_0
- OpStore %1121 %1119
- %1122 = OpLoad %int %i_2
+ %1122 = OpLoad %float %1121
+ %1123 = OpAccessChain %_ptr_Function_float %color %uint_0
+ OpStore %1123 %float_0
+ %1124 = OpAccessChain %_ptr_Function_float %color %uint_0
+ OpStore %1124 %1122
+ %1125 = OpLoad %int %i_2
OpStore %i_2 %int_0
- OpStore %i_2 %1122
- %1123 = OpCompositeExtract %float %972 1
- %1124 = OpCompositeExtract %float %873 1
- %1125 = OpCompositeConstruct %v2float %1123 %1124
- %1126 = OpLoad %int %i_2
+ OpStore %i_2 %1125
+ %1126 = OpCompositeExtract %float %975 1
+ %1127 = OpCompositeExtract %float %876 1
+ %1128 = OpCompositeConstruct %v2float %1126 %1127
+ %1129 = OpLoad %int %i_2
OpStore %i_2 %int_0
- OpStore %i_2 %1126
- %1127 = OpAccessChain %_ptr_Function_float %color %uint_1
- %1128 = OpConvertSToF %float %1089
- %1129 = OpFAdd %float %1128 %1110
- OpStore %1127 %1129
- %1130 = OpAccessChain %_ptr_Function_float %uv %uint_0
- %1131 = OpLoad %float %1130
- %1132 = OpAccessChain %_ptr_Function_float %uv %uint_0
- OpStore %1132 %float_0
+ OpStore %i_2 %1129
+ %1130 = OpAccessChain %_ptr_Function_float %color %uint_1
+ %1131 = OpConvertSToF %float %1092
+ %1132 = OpFAdd %float %1131 %1113
+ OpStore %1130 %1132
%1133 = OpAccessChain %_ptr_Function_float %uv %uint_0
- OpStore %1133 %1131
- OpBranch %1062
- %1062 = OpLabel
- %1134 = OpLoad %int %i_2
+ %1134 = OpLoad %float %1133
+ %1135 = OpAccessChain %_ptr_Function_float %uv %uint_0
+ OpStore %1135 %float_0
+ %1136 = OpAccessChain %_ptr_Function_float %uv %uint_0
+ OpStore %1136 %1134
+ OpBranch %1065
+ %1065 = OpLabel
+ %1137 = OpLoad %int %i_2
OpStore %i_2 %int_0
- OpStore %i_2 %1134
- %1135 = OpCompositeExtract %float %914 0
- %1136 = OpCompositeExtract %float %914 0
- %1137 = OpCompositeConstruct %v2float %1135 %1136
- %1138 = OpAccessChain %_ptr_Function_float %uv %uint_0
- %1139 = OpLoad %float %1138
- %1140 = OpAccessChain %_ptr_Function_float %uv %uint_0
- OpStore %1140 %float_0
+ OpStore %i_2 %1137
+ %1138 = OpCompositeExtract %float %917 0
+ %1139 = OpCompositeExtract %float %917 0
+ %1140 = OpCompositeConstruct %v2float %1138 %1139
%1141 = OpAccessChain %_ptr_Function_float %uv %uint_0
- OpStore %1141 %1139
- %1142 = OpAccessChain %_ptr_Function_float %uv %int_0
- %1143 = OpLoad %float %1142
- %1144 = OpLoad %v3float %color
- OpStore %color %885
- OpStore %color %1144
- %1145 = OpAccessChain %_ptr_Function_float %color %uint_0
+ %1142 = OpLoad %float %1141
+ %1143 = OpAccessChain %_ptr_Function_float %uv %uint_0
+ OpStore %1143 %float_0
+ %1144 = OpAccessChain %_ptr_Function_float %uv %uint_0
+ OpStore %1144 %1142
+ %1145 = OpAccessChain %_ptr_Function_float %uv %int_0
%1146 = OpLoad %float %1145
- %1147 = OpAccessChain %_ptr_Function_float %color %uint_0
- OpStore %1147 %float_0
+ %1147 = OpLoad %v3float %color
+ OpStore %color %888
+ OpStore %color %1147
%1148 = OpAccessChain %_ptr_Function_float %color %uint_0
- OpStore %1148 %1146
- %1150 = OpFOrdGreaterThan %bool %1143 %float_0_75
- OpSelectionMerge %1151 None
- OpBranchConditional %1150 %1152 %1151
- %1152 = OpLabel
- %1153 = OpAccessChain %_ptr_Function_float %color %uint_0
- %1154 = OpLoad %float %1153
- %1155 = OpAccessChain %_ptr_Function_float %color %uint_0
- OpStore %1155 %float_0
+ %1149 = OpLoad %float %1148
+ %1150 = OpAccessChain %_ptr_Function_float %color %uint_0
+ OpStore %1150 %float_0
+ %1151 = OpAccessChain %_ptr_Function_float %color %uint_0
+ OpStore %1151 %1149
+ %1153 = OpFOrdGreaterThan %bool %1146 %float_0_75
+ OpSelectionMerge %1154 None
+ OpBranchConditional %1153 %1155 %1154
+ %1155 = OpLabel
%1156 = OpAccessChain %_ptr_Function_float %color %uint_0
- OpStore %1156 %1154
- %1158 = OpAccessChain %_ptr_Private_int %obj %uint_0 %int_3
- %1159 = OpLoad %int %1158
- %1160 = OpAccessChain %_ptr_Function_float %color %uint_0
- %1161 = OpLoad %float %1160
- %1162 = OpAccessChain %_ptr_Function_float %color %uint_0
- OpStore %1162 %float_0
+ %1157 = OpLoad %float %1156
+ %1158 = OpAccessChain %_ptr_Function_float %color %uint_0
+ OpStore %1158 %float_0
+ %1159 = OpAccessChain %_ptr_Function_float %color %uint_0
+ OpStore %1159 %1157
+ %1161 = OpAccessChain %_ptr_Private_int %obj %uint_0 %int_3
+ %1162 = OpLoad %int %1161
%1163 = OpAccessChain %_ptr_Function_float %color %uint_0
- OpStore %1163 %1161
- %1164 = OpLoad %QuicksortObject %obj
- OpStore %obj %100
- OpStore %obj %1164
- %1165 = OpCompositeExtract %float %1137 0
- %1166 = OpCompositeExtract %float %1137 0
- %1167 = OpCompositeExtract %float %1137 0
- %1168 = OpCompositeConstruct %v3float %1165 %1166 %1167
- %1169 = OpAccessChain %_ptr_Function_float %uv %int_0
- %1170 = OpLoad %float %1169
- %1171 = OpAccessChain %_ptr_Function_float %uv %int_0
- OpStore %1171 %float_0
+ %1164 = OpLoad %float %1163
+ %1165 = OpAccessChain %_ptr_Function_float %color %uint_0
+ OpStore %1165 %float_0
+ %1166 = OpAccessChain %_ptr_Function_float %color %uint_0
+ OpStore %1166 %1164
+ %1167 = OpLoad %QuicksortObject %obj
+ OpStore %obj %103
+ OpStore %obj %1167
+ %1168 = OpCompositeExtract %float %1140 0
+ %1169 = OpCompositeExtract %float %1140 0
+ %1170 = OpCompositeExtract %float %1140 0
+ %1171 = OpCompositeConstruct %v3float %1168 %1169 %1170
%1172 = OpAccessChain %_ptr_Function_float %uv %int_0
- OpStore %1172 %1170
- %1173 = OpAccessChain %_ptr_Function_float %uv %uint_0
- %1174 = OpLoad %float %1173
- %1175 = OpAccessChain %_ptr_Function_float %uv %uint_0
- OpStore %1175 %float_0
+ %1173 = OpLoad %float %1172
+ %1174 = OpAccessChain %_ptr_Function_float %uv %int_0
+ OpStore %1174 %float_0
+ %1175 = OpAccessChain %_ptr_Function_float %uv %int_0
+ OpStore %1175 %1173
%1176 = OpAccessChain %_ptr_Function_float %uv %uint_0
- OpStore %1176 %1174
- %1177 = OpAccessChain %_ptr_Function_float %color %uint_2
- %1178 = OpLoad %float %1177
- %1179 = OpLoad %v3float %color
- OpStore %color %885
- OpStore %color %1179
- %1180 = OpCompositeExtract %float %1137 0
- %1181 = OpCompositeExtract %float %914 1
- %1182 = OpCompositeExtract %float %1137 1
- %1183 = OpCompositeConstruct %v3float %1180 %1181 %1182
- %1184 = OpAccessChain %_ptr_Function_float %color %uint_2
- %1185 = OpLoad %float %1184
- %1186 = OpAccessChain %_ptr_Function_float %color %uint_2
- OpStore %1186 %float_0
+ %1177 = OpLoad %float %1176
+ %1178 = OpAccessChain %_ptr_Function_float %uv %uint_0
+ OpStore %1178 %float_0
+ %1179 = OpAccessChain %_ptr_Function_float %uv %uint_0
+ OpStore %1179 %1177
+ %1180 = OpAccessChain %_ptr_Function_float %color %uint_2
+ %1181 = OpLoad %float %1180
+ %1182 = OpLoad %v3float %color
+ OpStore %color %888
+ OpStore %color %1182
+ %1183 = OpCompositeExtract %float %1140 0
+ %1184 = OpCompositeExtract %float %917 1
+ %1185 = OpCompositeExtract %float %1140 1
+ %1186 = OpCompositeConstruct %v3float %1183 %1184 %1185
%1187 = OpAccessChain %_ptr_Function_float %color %uint_2
- OpStore %1187 %1185
- %1188 = OpAccessChain %_ptr_Private_int %obj %uint_0 %uint_0
- %1189 = OpLoad %int %1188
- %1190 = OpAccessChain %_ptr_Private_int %obj %uint_0 %uint_0
- OpStore %1190 %int_0
+ %1188 = OpLoad %float %1187
+ %1189 = OpAccessChain %_ptr_Function_float %color %uint_2
+ OpStore %1189 %float_0
+ %1190 = OpAccessChain %_ptr_Function_float %color %uint_2
+ OpStore %1190 %1188
%1191 = OpAccessChain %_ptr_Private_int %obj %uint_0 %uint_0
- OpStore %1191 %1189
- %1192 = OpCompositeExtract %float %873 0
- %1193 = OpCompositeExtract %float %873 1
- %1194 = OpCompositeConstruct %v2float %1192 %1193
- %1195 = OpAccessChain %_ptr_Function_float %color %uint_2
- %1196 = OpLoad %float %1195
- %1197 = OpAccessChain %_ptr_Function_float %color %uint_2
- OpStore %1197 %float_0
+ %1192 = OpLoad %int %1191
+ %1193 = OpAccessChain %_ptr_Private_int %obj %uint_0 %uint_0
+ OpStore %1193 %int_0
+ %1194 = OpAccessChain %_ptr_Private_int %obj %uint_0 %uint_0
+ OpStore %1194 %1192
+ %1195 = OpCompositeExtract %float %876 0
+ %1196 = OpCompositeExtract %float %876 1
+ %1197 = OpCompositeConstruct %v2float %1195 %1196
%1198 = OpAccessChain %_ptr_Function_float %color %uint_2
- OpStore %1198 %1196
- %1199 = OpAccessChain %_ptr_Function_float %color %uint_2
- %1200 = OpConvertSToF %float %1159
- %1201 = OpFAdd %float %1178 %1200
- OpStore %1199 %1201
- %1202 = OpLoad %v2float %uv
- OpStore %uv %873
- OpStore %uv %1202
- %1203 = OpCompositeExtract %float %1194 1
- %1204 = OpCompositeExtract %float %1194 1
- %1205 = OpCompositeConstruct %v2float %1203 %1204
- OpBranch %1151
- %1151 = OpLabel
- %1206 = OpAccessChain %_ptr_Function_float %uv %int_0
- %1207 = OpLoad %float %1206
- %1208 = OpAccessChain %_ptr_Function_float %uv %int_0
- OpStore %1208 %float_0
+ %1199 = OpLoad %float %1198
+ %1200 = OpAccessChain %_ptr_Function_float %color %uint_2
+ OpStore %1200 %float_0
+ %1201 = OpAccessChain %_ptr_Function_float %color %uint_2
+ OpStore %1201 %1199
+ %1202 = OpAccessChain %_ptr_Function_float %color %uint_2
+ %1203 = OpConvertSToF %float %1162
+ %1204 = OpFAdd %float %1181 %1203
+ OpStore %1202 %1204
+ %1205 = OpLoad %v2float %uv
+ OpStore %uv %876
+ OpStore %uv %1205
+ %1206 = OpCompositeExtract %float %1197 1
+ %1207 = OpCompositeExtract %float %1197 1
+ %1208 = OpCompositeConstruct %v2float %1206 %1207
+ OpBranch %1154
+ %1154 = OpLabel
%1209 = OpAccessChain %_ptr_Function_float %uv %int_0
- OpStore %1209 %1207
- %1210 = OpCompositeExtract %float %967 0
- %1211 = OpCompositeExtract %float %967 1
- %1212 = OpCompositeExtract %float %967 1
- %1213 = OpCompositeConstruct %v3float %1210 %1211 %1212
- %1215 = OpAccessChain %_ptr_Private_int %obj %uint_0 %int_4
- %1216 = OpLoad %int %1215
- %1217 = OpAccessChain %_ptr_Function_float %uv %int_0
- %1218 = OpLoad %float %1217
- %1219 = OpAccessChain %_ptr_Function_float %uv %int_0
- OpStore %1219 %float_0
+ %1210 = OpLoad %float %1209
+ %1211 = OpAccessChain %_ptr_Function_float %uv %int_0
+ OpStore %1211 %float_0
+ %1212 = OpAccessChain %_ptr_Function_float %uv %int_0
+ OpStore %1212 %1210
+ %1213 = OpCompositeExtract %float %970 0
+ %1214 = OpCompositeExtract %float %970 1
+ %1215 = OpCompositeExtract %float %970 1
+ %1216 = OpCompositeConstruct %v3float %1213 %1214 %1215
+ %1218 = OpAccessChain %_ptr_Private_int %obj %uint_0 %int_4
+ %1219 = OpLoad %int %1218
%1220 = OpAccessChain %_ptr_Function_float %uv %int_0
- OpStore %1220 %1218
- %1221 = OpLoad %v3float %color
- OpStore %color %885
- OpStore %color %1221
- %1222 = OpCompositeExtract %float %893 1
- %1223 = OpCompositeExtract %float %959 0
- %1224 = OpCompositeExtract %float %959 0
- %1225 = OpCompositeConstruct %v3float %1222 %1223 %1224
- %1226 = OpAccessChain %_ptr_Private_int %obj %uint_0 %int_4
- %1227 = OpLoad %int %1226
- %1228 = OpAccessChain %_ptr_Private_int %obj %uint_0 %int_4
- OpStore %1228 %int_0
+ %1221 = OpLoad %float %1220
+ %1222 = OpAccessChain %_ptr_Function_float %uv %int_0
+ OpStore %1222 %float_0
+ %1223 = OpAccessChain %_ptr_Function_float %uv %int_0
+ OpStore %1223 %1221
+ %1224 = OpLoad %v3float %color
+ OpStore %color %888
+ OpStore %color %1224
+ %1225 = OpCompositeExtract %float %896 1
+ %1226 = OpCompositeExtract %float %962 0
+ %1227 = OpCompositeExtract %float %962 0
+ %1228 = OpCompositeConstruct %v3float %1225 %1226 %1227
%1229 = OpAccessChain %_ptr_Private_int %obj %uint_0 %int_4
- OpStore %1229 %1227
- %1230 = OpCompositeExtract %float %914 0
- %1231 = OpCompositeExtract %float %897 2
- %1232 = OpCompositeConstruct %v2float %1230 %1231
- %1233 = OpAccessChain %_ptr_Function_float %uv %uint_0
- %1234 = OpLoad %float %1233
- %1235 = OpAccessChain %_ptr_Function_float %uv %uint_0
- OpStore %1235 %float_0
+ %1230 = OpLoad %int %1229
+ %1231 = OpAccessChain %_ptr_Private_int %obj %uint_0 %int_4
+ OpStore %1231 %int_0
+ %1232 = OpAccessChain %_ptr_Private_int %obj %uint_0 %int_4
+ OpStore %1232 %1230
+ %1233 = OpCompositeExtract %float %917 0
+ %1234 = OpCompositeExtract %float %900 2
+ %1235 = OpCompositeConstruct %v2float %1233 %1234
%1236 = OpAccessChain %_ptr_Function_float %uv %uint_0
- OpStore %1236 %1234
- %1237 = OpAccessChain %_ptr_Function_float %color %uint_1
- %1238 = OpLoad %float %1237
- %1239 = OpAccessChain %_ptr_Function_float %color %uint_1
- %1240 = OpLoad %float %1239
- %1241 = OpAccessChain %_ptr_Function_float %color %uint_1
- OpStore %1241 %float_0
+ %1237 = OpLoad %float %1236
+ %1238 = OpAccessChain %_ptr_Function_float %uv %uint_0
+ OpStore %1238 %float_0
+ %1239 = OpAccessChain %_ptr_Function_float %uv %uint_0
+ OpStore %1239 %1237
+ %1240 = OpAccessChain %_ptr_Function_float %color %uint_1
+ %1241 = OpLoad %float %1240
%1242 = OpAccessChain %_ptr_Function_float %color %uint_1
- OpStore %1242 %1240
- %1243 = OpCompositeExtract %float %1137 0
- %1244 = OpCompositeExtract %float %925 0
- %1245 = OpCompositeConstruct %v2float %1243 %1244
- %1246 = OpAccessChain %_ptr_Function_float %uv %uint_0
- %1247 = OpLoad %float %1246
- %1248 = OpAccessChain %_ptr_Function_float %uv %uint_0
- OpStore %1248 %float_0
+ %1243 = OpLoad %float %1242
+ %1244 = OpAccessChain %_ptr_Function_float %color %uint_1
+ OpStore %1244 %float_0
+ %1245 = OpAccessChain %_ptr_Function_float %color %uint_1
+ OpStore %1245 %1243
+ %1246 = OpCompositeExtract %float %1140 0
+ %1247 = OpCompositeExtract %float %928 0
+ %1248 = OpCompositeConstruct %v2float %1246 %1247
%1249 = OpAccessChain %_ptr_Function_float %uv %uint_0
- OpStore %1249 %1247
- %1250 = OpAccessChain %_ptr_Function_float %color %uint_0
- %1251 = OpLoad %float %1250
- %1252 = OpAccessChain %_ptr_Function_float %color %uint_0
- OpStore %1252 %float_0
+ %1250 = OpLoad %float %1249
+ %1251 = OpAccessChain %_ptr_Function_float %uv %uint_0
+ OpStore %1251 %float_0
+ %1252 = OpAccessChain %_ptr_Function_float %uv %uint_0
+ OpStore %1252 %1250
%1253 = OpAccessChain %_ptr_Function_float %color %uint_0
- OpStore %1253 %1251
- %1254 = OpCompositeExtract %float %932 2
- %1255 = OpCompositeExtract %float %1047 1
- %1256 = OpCompositeConstruct %v2float %1254 %1255
- %1257 = OpAccessChain %_ptr_Function_float %color %uint_1
- %1258 = OpConvertSToF %float %1216
- %1259 = OpFAdd %float %1238 %1258
- OpStore %1257 %1259
- %1260 = OpCompositeExtract %float %873 0
- %1261 = OpCompositeExtract %float %1213 0
- %1262 = OpCompositeExtract %float %873 1
- %1263 = OpCompositeConstruct %v3float %1260 %1261 %1262
- %1264 = OpAccessChain %_ptr_Function_float %uv %uint_0
- %1265 = OpLoad %float %1264
- %1266 = OpAccessChain %_ptr_Function_float %uv %uint_0
- OpStore %1266 %float_0
+ %1254 = OpLoad %float %1253
+ %1255 = OpAccessChain %_ptr_Function_float %color %uint_0
+ OpStore %1255 %float_0
+ %1256 = OpAccessChain %_ptr_Function_float %color %uint_0
+ OpStore %1256 %1254
+ %1257 = OpCompositeExtract %float %935 2
+ %1258 = OpCompositeExtract %float %1050 1
+ %1259 = OpCompositeConstruct %v2float %1257 %1258
+ %1260 = OpAccessChain %_ptr_Function_float %color %uint_1
+ %1261 = OpConvertSToF %float %1219
+ %1262 = OpFAdd %float %1241 %1261
+ OpStore %1260 %1262
+ %1263 = OpCompositeExtract %float %876 0
+ %1264 = OpCompositeExtract %float %1216 0
+ %1265 = OpCompositeExtract %float %876 1
+ %1266 = OpCompositeConstruct %v3float %1263 %1264 %1265
%1267 = OpAccessChain %_ptr_Function_float %uv %uint_0
- OpStore %1267 %1265
- %1268 = OpAccessChain %_ptr_Function_float %color %uint_0
- %1269 = OpLoad %float %1268
- %1270 = OpAccessChain %_ptr_Function_float %color %uint_0
- OpStore %1270 %float_0
+ %1268 = OpLoad %float %1267
+ %1269 = OpAccessChain %_ptr_Function_float %uv %uint_0
+ OpStore %1269 %float_0
+ %1270 = OpAccessChain %_ptr_Function_float %uv %uint_0
+ OpStore %1270 %1268
%1271 = OpAccessChain %_ptr_Function_float %color %uint_0
- OpStore %1271 %1269
- %1272 = OpCompositeExtract %float %1213 0
- %1273 = OpCompositeExtract %float %1213 1
- %1274 = OpCompositeConstruct %v2float %1272 %1273
- %1275 = OpAccessChain %_ptr_Function_float %uv %uint_1
- %1276 = OpLoad %float %1275
- %1277 = OpAccessChain %_ptr_Function_float %uv %uint_1
- OpStore %1277 %float_0
+ %1272 = OpLoad %float %1271
+ %1273 = OpAccessChain %_ptr_Function_float %color %uint_0
+ OpStore %1273 %float_0
+ %1274 = OpAccessChain %_ptr_Function_float %color %uint_0
+ OpStore %1274 %1272
+ %1275 = OpCompositeExtract %float %1216 0
+ %1276 = OpCompositeExtract %float %1216 1
+ %1277 = OpCompositeConstruct %v2float %1275 %1276
%1278 = OpAccessChain %_ptr_Function_float %uv %uint_1
- OpStore %1278 %1276
- %1279 = OpAccessChain %_ptr_Function_float %uv %uint_1
- %1280 = OpLoad %float %1279
- %1281 = OpLoad %int %i_2
+ %1279 = OpLoad %float %1278
+ %1280 = OpAccessChain %_ptr_Function_float %uv %uint_1
+ OpStore %1280 %float_0
+ %1281 = OpAccessChain %_ptr_Function_float %uv %uint_1
+ OpStore %1281 %1279
+ %1282 = OpAccessChain %_ptr_Function_float %uv %uint_1
+ %1283 = OpLoad %float %1282
+ %1284 = OpLoad %int %i_2
OpStore %i_2 %int_0
- OpStore %i_2 %1281
- %1282 = OpCompositeExtract %float %873 1
- %1283 = OpCompositeExtract %float %967 1
- %1284 = OpCompositeExtract %float %873 0
- %1285 = OpCompositeConstruct %v3float %1282 %1283 %1284
- %1286 = OpAccessChain %_ptr_Private_int %obj %uint_0 %uint_0
- %1287 = OpLoad %int %1286
- %1288 = OpAccessChain %_ptr_Private_int %obj %uint_0 %uint_0
- OpStore %1288 %int_0
+ OpStore %i_2 %1284
+ %1285 = OpCompositeExtract %float %876 1
+ %1286 = OpCompositeExtract %float %970 1
+ %1287 = OpCompositeExtract %float %876 0
+ %1288 = OpCompositeConstruct %v3float %1285 %1286 %1287
%1289 = OpAccessChain %_ptr_Private_int %obj %uint_0 %uint_0
- OpStore %1289 %1287
- %1290 = OpAccessChain %_ptr_Function_float %color %uint_1
- %1291 = OpLoad %float %1290
- %1292 = OpAccessChain %_ptr_Function_float %color %uint_1
- OpStore %1292 %float_0
+ %1290 = OpLoad %int %1289
+ %1291 = OpAccessChain %_ptr_Private_int %obj %uint_0 %uint_0
+ OpStore %1291 %int_0
+ %1292 = OpAccessChain %_ptr_Private_int %obj %uint_0 %uint_0
+ OpStore %1292 %1290
%1293 = OpAccessChain %_ptr_Function_float %color %uint_1
- OpStore %1293 %1291
- %1294 = OpCompositeExtract %float %893 0
- %1295 = OpCompositeExtract %float %893 0
- %1296 = OpCompositeExtract %float %873 1
- %1297 = OpCompositeConstruct %v3float %1294 %1295 %1296
- %1298 = OpAccessChain %_ptr_Function_float %uv %uint_0
- %1299 = OpLoad %float %1298
- %1300 = OpAccessChain %_ptr_Function_float %uv %uint_0
- OpStore %1300 %float_0
+ %1294 = OpLoad %float %1293
+ %1295 = OpAccessChain %_ptr_Function_float %color %uint_1
+ OpStore %1295 %float_0
+ %1296 = OpAccessChain %_ptr_Function_float %color %uint_1
+ OpStore %1296 %1294
+ %1297 = OpCompositeExtract %float %896 0
+ %1298 = OpCompositeExtract %float %896 0
+ %1299 = OpCompositeExtract %float %876 1
+ %1300 = OpCompositeConstruct %v3float %1297 %1298 %1299
%1301 = OpAccessChain %_ptr_Function_float %uv %uint_0
- OpStore %1301 %1299
- %1302 = OpFOrdGreaterThan %bool %1280 %float_0_25
- OpSelectionMerge %1303 None
- OpBranchConditional %1302 %1304 %1303
- %1304 = OpLabel
- %1305 = OpCompositeExtract %float %901 0
- %1306 = OpCompositeExtract %float %1297 2
- %1307 = OpCompositeConstruct %v2float %1305 %1306
- %1308 = OpLoad %v3float %color
- OpStore %color %885
- OpStore %color %1308
- %1310 = OpAccessChain %_ptr_Private_int %obj %uint_0 %uint_5
- %1311 = OpLoad %int %1310
- %1312 = OpAccessChain %_ptr_Function_float %color %uint_0
- %1313 = OpLoad %float %1312
- %1314 = OpAccessChain %_ptr_Function_float %color %uint_0
- OpStore %1314 %float_0
+ %1302 = OpLoad %float %1301
+ %1303 = OpAccessChain %_ptr_Function_float %uv %uint_0
+ OpStore %1303 %float_0
+ %1304 = OpAccessChain %_ptr_Function_float %uv %uint_0
+ OpStore %1304 %1302
+ %1305 = OpFOrdGreaterThan %bool %1283 %float_0_25
+ OpSelectionMerge %1306 None
+ OpBranchConditional %1305 %1307 %1306
+ %1307 = OpLabel
+ %1308 = OpCompositeExtract %float %904 0
+ %1309 = OpCompositeExtract %float %1300 2
+ %1310 = OpCompositeConstruct %v2float %1308 %1309
+ %1311 = OpLoad %v3float %color
+ OpStore %color %888
+ OpStore %color %1311
+ %1313 = OpAccessChain %_ptr_Private_int %obj %uint_0 %uint_5
+ %1314 = OpLoad %int %1313
%1315 = OpAccessChain %_ptr_Function_float %color %uint_0
- OpStore %1315 %1313
- %1316 = OpLoad %int %i_2
- OpStore %i_2 %int_0
- OpStore %i_2 %1316
- %1317 = OpLoad %int %i_2
- OpStore %i_2 %int_0
- OpStore %i_2 %1317
+ %1316 = OpLoad %float %1315
+ %1317 = OpAccessChain %_ptr_Function_float %color %uint_0
+ OpStore %1317 %float_0
%1318 = OpAccessChain %_ptr_Function_float %color %uint_0
- %1319 = OpLoad %float %1318
- %1320 = OpAccessChain %_ptr_Function_float %uv %int_0
- %1321 = OpLoad %float %1320
- %1322 = OpAccessChain %_ptr_Function_float %uv %int_0
- OpStore %1322 %float_0
+ OpStore %1318 %1316
+ %1319 = OpLoad %int %i_2
+ OpStore %i_2 %int_0
+ OpStore %i_2 %1319
+ %1320 = OpLoad %int %i_2
+ OpStore %i_2 %int_0
+ OpStore %i_2 %1320
+ %1321 = OpAccessChain %_ptr_Function_float %color %uint_0
+ %1322 = OpLoad %float %1321
%1323 = OpAccessChain %_ptr_Function_float %uv %int_0
- OpStore %1323 %1321
- %1324 = OpCompositeExtract %float %972 0
- %1325 = OpCompositeExtract %float %1245 1
- %1326 = OpCompositeExtract %float %972 1
- %1327 = OpCompositeConstruct %v3float %1324 %1325 %1326
- %1328 = OpLoad %QuicksortObject %obj
- OpStore %obj %100
- OpStore %obj %1328
- %1329 = OpAccessChain %_ptr_Function_float %uv %uint_1
- %1330 = OpLoad %float %1329
- %1331 = OpAccessChain %_ptr_Function_float %uv %uint_1
- OpStore %1331 %float_0
+ %1324 = OpLoad %float %1323
+ %1325 = OpAccessChain %_ptr_Function_float %uv %int_0
+ OpStore %1325 %float_0
+ %1326 = OpAccessChain %_ptr_Function_float %uv %int_0
+ OpStore %1326 %1324
+ %1327 = OpCompositeExtract %float %975 0
+ %1328 = OpCompositeExtract %float %1248 1
+ %1329 = OpCompositeExtract %float %975 1
+ %1330 = OpCompositeConstruct %v3float %1327 %1328 %1329
+ %1331 = OpLoad %QuicksortObject %obj
+ OpStore %obj %103
+ OpStore %obj %1331
%1332 = OpAccessChain %_ptr_Function_float %uv %uint_1
- OpStore %1332 %1330
- %1333 = OpLoad %int %i_2
+ %1333 = OpLoad %float %1332
+ %1334 = OpAccessChain %_ptr_Function_float %uv %uint_1
+ OpStore %1334 %float_0
+ %1335 = OpAccessChain %_ptr_Function_float %uv %uint_1
+ OpStore %1335 %1333
+ %1336 = OpLoad %int %i_2
OpStore %i_2 %int_0
- OpStore %i_2 %1333
- %1334 = OpCompositeExtract %float %897 3
- %1335 = OpCompositeExtract %float %897 3
- %1336 = OpCompositeExtract %float %921 0
- %1337 = OpCompositeConstruct %v3float %1334 %1335 %1336
- %1338 = OpAccessChain %_ptr_Function_float %uv %uint_0
- %1339 = OpLoad %float %1338
- %1340 = OpAccessChain %_ptr_Function_float %uv %uint_0
- OpStore %1340 %float_0
+ OpStore %i_2 %1336
+ %1337 = OpCompositeExtract %float %900 3
+ %1338 = OpCompositeExtract %float %900 3
+ %1339 = OpCompositeExtract %float %924 0
+ %1340 = OpCompositeConstruct %v3float %1337 %1338 %1339
%1341 = OpAccessChain %_ptr_Function_float %uv %uint_0
- OpStore %1341 %1339
- %1342 = OpAccessChain %_ptr_Function_float %color %uint_0
- %1343 = OpConvertSToF %float %1311
- %1344 = OpFAdd %float %1343 %1319
- OpStore %1342 %1344
- %1345 = OpCompositeExtract %float %967 1
- %1346 = OpCompositeExtract %float %925 0
- %1347 = OpCompositeExtract %float %967 1
- %1348 = OpCompositeConstruct %v3float %1345 %1346 %1347
- %1349 = OpAccessChain %_ptr_Function_float %uv %uint_0
- %1350 = OpLoad %float %1349
- %1351 = OpAccessChain %_ptr_Function_float %uv %uint_0
- OpStore %1351 %float_0
+ %1342 = OpLoad %float %1341
+ %1343 = OpAccessChain %_ptr_Function_float %uv %uint_0
+ OpStore %1343 %float_0
+ %1344 = OpAccessChain %_ptr_Function_float %uv %uint_0
+ OpStore %1344 %1342
+ %1345 = OpAccessChain %_ptr_Function_float %color %uint_0
+ %1346 = OpConvertSToF %float %1314
+ %1347 = OpFAdd %float %1346 %1322
+ OpStore %1345 %1347
+ %1348 = OpCompositeExtract %float %970 1
+ %1349 = OpCompositeExtract %float %928 0
+ %1350 = OpCompositeExtract %float %970 1
+ %1351 = OpCompositeConstruct %v3float %1348 %1349 %1350
%1352 = OpAccessChain %_ptr_Function_float %uv %uint_0
- OpStore %1352 %1350
- OpBranch %1303
- %1303 = OpLabel
- %1353 = OpAccessChain %_ptr_Function_float %color %uint_0
- %1354 = OpLoad %float %1353
- %1355 = OpAccessChain %_ptr_Function_float %color %uint_0
- OpStore %1355 %float_0
+ %1353 = OpLoad %float %1352
+ %1354 = OpAccessChain %_ptr_Function_float %uv %uint_0
+ OpStore %1354 %float_0
+ %1355 = OpAccessChain %_ptr_Function_float %uv %uint_0
+ OpStore %1355 %1353
+ OpBranch %1306
+ %1306 = OpLabel
%1356 = OpAccessChain %_ptr_Function_float %color %uint_0
- OpStore %1356 %1354
- %1357 = OpCompositeExtract %float %1137 0
- %1358 = OpCompositeExtract %float %925 1
- %1359 = OpCompositeExtract %float %925 0
- %1360 = OpCompositeConstruct %v3float %1357 %1358 %1359
- %1361 = OpAccessChain %_ptr_Function_float %uv %uint_1
- %1362 = OpLoad %float %1361
- %1363 = OpAccessChain %_ptr_Function_float %uv %uint_1
- OpStore %1363 %float_0
+ %1357 = OpLoad %float %1356
+ %1358 = OpAccessChain %_ptr_Function_float %color %uint_0
+ OpStore %1358 %float_0
+ %1359 = OpAccessChain %_ptr_Function_float %color %uint_0
+ OpStore %1359 %1357
+ %1360 = OpCompositeExtract %float %1140 0
+ %1361 = OpCompositeExtract %float %928 1
+ %1362 = OpCompositeExtract %float %928 0
+ %1363 = OpCompositeConstruct %v3float %1360 %1361 %1362
%1364 = OpAccessChain %_ptr_Function_float %uv %uint_1
- OpStore %1364 %1362
- %1365 = OpAccessChain %_ptr_Private_int %obj %uint_0 %int_4
- %1366 = OpLoad %int %1365
- %1367 = OpAccessChain %_ptr_Private_int %obj %uint_0 %int_4
- OpStore %1367 %int_0
+ %1365 = OpLoad %float %1364
+ %1366 = OpAccessChain %_ptr_Function_float %uv %uint_1
+ OpStore %1366 %float_0
+ %1367 = OpAccessChain %_ptr_Function_float %uv %uint_1
+ OpStore %1367 %1365
%1368 = OpAccessChain %_ptr_Private_int %obj %uint_0 %int_4
- OpStore %1368 %1366
- %1369 = OpAccessChain %_ptr_Function_float %uv %uint_1
- %1370 = OpLoad %float %1369
- %1371 = OpAccessChain %_ptr_Private_int %obj %uint_0 %uint_0
- %1372 = OpLoad %int %1371
- %1373 = OpAccessChain %_ptr_Private_int %obj %uint_0 %uint_0
- OpStore %1373 %int_0
+ %1369 = OpLoad %int %1368
+ %1370 = OpAccessChain %_ptr_Private_int %obj %uint_0 %int_4
+ OpStore %1370 %int_0
+ %1371 = OpAccessChain %_ptr_Private_int %obj %uint_0 %int_4
+ OpStore %1371 %1369
+ %1372 = OpAccessChain %_ptr_Function_float %uv %uint_1
+ %1373 = OpLoad %float %1372
%1374 = OpAccessChain %_ptr_Private_int %obj %uint_0 %uint_0
- OpStore %1374 %1372
- %1375 = OpFOrdGreaterThan %bool %1370 %float_0_5
- OpSelectionMerge %1376 None
- OpBranchConditional %1375 %1377 %1376
- %1377 = OpLabel
- %1378 = OpAccessChain %_ptr_Function_float %uv %uint_0
- %1379 = OpLoad %float %1378
- %1380 = OpAccessChain %_ptr_Function_float %uv %uint_0
- OpStore %1380 %float_0
+ %1375 = OpLoad %int %1374
+ %1376 = OpAccessChain %_ptr_Private_int %obj %uint_0 %uint_0
+ OpStore %1376 %int_0
+ %1377 = OpAccessChain %_ptr_Private_int %obj %uint_0 %uint_0
+ OpStore %1377 %1375
+ %1378 = OpFOrdGreaterThan %bool %1373 %float_0_5
+ OpSelectionMerge %1379 None
+ OpBranchConditional %1378 %1380 %1379
+ %1380 = OpLabel
%1381 = OpAccessChain %_ptr_Function_float %uv %uint_0
- OpStore %1381 %1379
- %1382 = OpCompositeExtract %float %1297 1
- %1383 = OpCompositeExtract %float %972 1
- %1384 = OpCompositeConstruct %v2float %1382 %1383
- %1385 = OpAccessChain %_ptr_Function_float %color %uint_1
- %1386 = OpLoad %float %1385
- %1387 = OpAccessChain %_ptr_Function_float %color %uint_1
- OpStore %1387 %float_0
+ %1382 = OpLoad %float %1381
+ %1383 = OpAccessChain %_ptr_Function_float %uv %uint_0
+ OpStore %1383 %float_0
+ %1384 = OpAccessChain %_ptr_Function_float %uv %uint_0
+ OpStore %1384 %1382
+ %1385 = OpCompositeExtract %float %1300 1
+ %1386 = OpCompositeExtract %float %975 1
+ %1387 = OpCompositeConstruct %v2float %1385 %1386
%1388 = OpAccessChain %_ptr_Function_float %color %uint_1
- OpStore %1388 %1386
- %1389 = OpCompositeExtract %float %919 2
- %1390 = OpCompositeExtract %float %919 1
- %1391 = OpCompositeConstruct %v2float %1389 %1390
- %1392 = OpAccessChain %_ptr_Function_float %uv %uint_1
- %1393 = OpLoad %float %1392
- %1394 = OpAccessChain %_ptr_Function_float %uv %uint_1
- OpStore %1394 %float_0
+ %1389 = OpLoad %float %1388
+ %1390 = OpAccessChain %_ptr_Function_float %color %uint_1
+ OpStore %1390 %float_0
+ %1391 = OpAccessChain %_ptr_Function_float %color %uint_1
+ OpStore %1391 %1389
+ %1392 = OpCompositeExtract %float %922 2
+ %1393 = OpCompositeExtract %float %922 1
+ %1394 = OpCompositeConstruct %v2float %1392 %1393
%1395 = OpAccessChain %_ptr_Function_float %uv %uint_1
- OpStore %1395 %1393
- %1397 = OpAccessChain %_ptr_Private_int %obj %uint_0 %uint_6
- %1398 = OpLoad %int %1397
- %1399 = OpAccessChain %_ptr_Function_float %uv %uint_1
- %1400 = OpLoad %float %1399
- %1401 = OpAccessChain %_ptr_Function_float %uv %uint_1
- OpStore %1401 %float_0
+ %1396 = OpLoad %float %1395
+ %1397 = OpAccessChain %_ptr_Function_float %uv %uint_1
+ OpStore %1397 %float_0
+ %1398 = OpAccessChain %_ptr_Function_float %uv %uint_1
+ OpStore %1398 %1396
+ %1400 = OpAccessChain %_ptr_Private_int %obj %uint_0 %uint_6
+ %1401 = OpLoad %int %1400
%1402 = OpAccessChain %_ptr_Function_float %uv %uint_1
- OpStore %1402 %1400
- %1403 = OpLoad %int %i_2
+ %1403 = OpLoad %float %1402
+ %1404 = OpAccessChain %_ptr_Function_float %uv %uint_1
+ OpStore %1404 %float_0
+ %1405 = OpAccessChain %_ptr_Function_float %uv %uint_1
+ OpStore %1405 %1403
+ %1406 = OpLoad %int %i_2
OpStore %i_2 %int_0
- OpStore %i_2 %1403
- %1404 = OpAccessChain %_ptr_Private_int %obj %uint_0 %int_4
- %1405 = OpLoad %int %1404
- %1406 = OpAccessChain %_ptr_Private_int %obj %uint_0 %int_4
- OpStore %1406 %int_0
+ OpStore %i_2 %1406
%1407 = OpAccessChain %_ptr_Private_int %obj %uint_0 %int_4
- OpStore %1407 %1405
- %1408 = OpCompositeExtract %float %1225 2
- %1409 = OpCompositeExtract %float %1225 1
- %1410 = OpCompositeConstruct %v2float %1408 %1409
- %1411 = OpAccessChain %_ptr_Function_float %color %uint_1
- %1412 = OpLoad %float %1411
- %1413 = OpLoad %v2float %uv
- OpStore %uv %873
- OpStore %uv %1413
- %1414 = OpAccessChain %_ptr_Function_float %color %uint_0
+ %1408 = OpLoad %int %1407
+ %1409 = OpAccessChain %_ptr_Private_int %obj %uint_0 %int_4
+ OpStore %1409 %int_0
+ %1410 = OpAccessChain %_ptr_Private_int %obj %uint_0 %int_4
+ OpStore %1410 %1408
+ %1411 = OpCompositeExtract %float %1228 2
+ %1412 = OpCompositeExtract %float %1228 1
+ %1413 = OpCompositeConstruct %v2float %1411 %1412
+ %1414 = OpAccessChain %_ptr_Function_float %color %uint_1
%1415 = OpLoad %float %1414
- %1416 = OpAccessChain %_ptr_Function_float %color %uint_0
- OpStore %1416 %float_0
+ %1416 = OpLoad %v2float %uv
+ OpStore %uv %876
+ OpStore %uv %1416
%1417 = OpAccessChain %_ptr_Function_float %color %uint_0
- OpStore %1417 %1415
- %1418 = OpCompositeExtract %float %1245 1
- %1419 = OpCompositeExtract %float %1245 0
- %1420 = OpCompositeConstruct %v2float %1418 %1419
- %1421 = OpAccessChain %_ptr_Private_int %obj %uint_0 %uint_6
- %1422 = OpLoad %int %1421
- %1423 = OpAccessChain %_ptr_Private_int %obj %uint_0 %uint_6
- OpStore %1423 %int_0
+ %1418 = OpLoad %float %1417
+ %1419 = OpAccessChain %_ptr_Function_float %color %uint_0
+ OpStore %1419 %float_0
+ %1420 = OpAccessChain %_ptr_Function_float %color %uint_0
+ OpStore %1420 %1418
+ %1421 = OpCompositeExtract %float %1248 1
+ %1422 = OpCompositeExtract %float %1248 0
+ %1423 = OpCompositeConstruct %v2float %1421 %1422
%1424 = OpAccessChain %_ptr_Private_int %obj %uint_0 %uint_6
- OpStore %1424 %1422
- %1425 = OpAccessChain %_ptr_Private_int %obj %uint_0 %uint_6
- %1426 = OpLoad %int %1425
+ %1425 = OpLoad %int %1424
+ %1426 = OpAccessChain %_ptr_Private_int %obj %uint_0 %uint_6
+ OpStore %1426 %int_0
%1427 = OpAccessChain %_ptr_Private_int %obj %uint_0 %uint_6
- OpStore %1427 %int_0
+ OpStore %1427 %1425
%1428 = OpAccessChain %_ptr_Private_int %obj %uint_0 %uint_6
- OpStore %1428 %1426
- %1429 = OpCompositeExtract %float %1297 2
- %1430 = OpCompositeExtract %float %1297 2
- %1431 = OpCompositeConstruct %v2float %1429 %1430
- %1432 = OpLoad %QuicksortObject %obj
- OpStore %obj %100
- OpStore %obj %1432
- %1433 = OpAccessChain %_ptr_Function_float %color %uint_1
- %1434 = OpConvertSToF %float %1398
- %1435 = OpFAdd %float %1434 %1412
- OpStore %1433 %1435
- %1436 = OpAccessChain %_ptr_Function_float %color %uint_0
- %1437 = OpLoad %float %1436
- %1438 = OpAccessChain %_ptr_Function_float %color %uint_0
- OpStore %1438 %float_0
+ %1429 = OpLoad %int %1428
+ %1430 = OpAccessChain %_ptr_Private_int %obj %uint_0 %uint_6
+ OpStore %1430 %int_0
+ %1431 = OpAccessChain %_ptr_Private_int %obj %uint_0 %uint_6
+ OpStore %1431 %1429
+ %1432 = OpCompositeExtract %float %1300 2
+ %1433 = OpCompositeExtract %float %1300 2
+ %1434 = OpCompositeConstruct %v2float %1432 %1433
+ %1435 = OpLoad %QuicksortObject %obj
+ OpStore %obj %103
+ OpStore %obj %1435
+ %1436 = OpAccessChain %_ptr_Function_float %color %uint_1
+ %1437 = OpConvertSToF %float %1401
+ %1438 = OpFAdd %float %1437 %1415
+ OpStore %1436 %1438
%1439 = OpAccessChain %_ptr_Function_float %color %uint_0
- OpStore %1439 %1437
- %1440 = OpCompositeExtract %float %35 1
- %1441 = OpCompositeExtract %float %967 0
- %1442 = OpCompositeConstruct %v2float %1440 %1441
- %1443 = OpAccessChain %_ptr_Function_float %color %uint_1
- %1444 = OpLoad %float %1443
- %1445 = OpAccessChain %_ptr_Function_float %color %uint_1
- OpStore %1445 %float_0
+ %1440 = OpLoad %float %1439
+ %1441 = OpAccessChain %_ptr_Function_float %color %uint_0
+ OpStore %1441 %float_0
+ %1442 = OpAccessChain %_ptr_Function_float %color %uint_0
+ OpStore %1442 %1440
+ %1443 = OpCompositeExtract %float %38 1
+ %1444 = OpCompositeExtract %float %970 0
+ %1445 = OpCompositeConstruct %v2float %1443 %1444
%1446 = OpAccessChain %_ptr_Function_float %color %uint_1
- OpStore %1446 %1444
- OpBranch %1376
- %1376 = OpLabel
- %1447 = OpCompositeExtract %float %972 1
- %1448 = OpCompositeExtract %float %972 1
- %1449 = OpCompositeConstruct %v2float %1447 %1448
- %1450 = OpAccessChain %_ptr_Function_float %color %uint_0
- %1451 = OpLoad %float %1450
- %1452 = OpAccessChain %_ptr_Function_float %color %uint_0
- OpStore %1452 %float_0
+ %1447 = OpLoad %float %1446
+ %1448 = OpAccessChain %_ptr_Function_float %color %uint_1
+ OpStore %1448 %float_0
+ %1449 = OpAccessChain %_ptr_Function_float %color %uint_1
+ OpStore %1449 %1447
+ OpBranch %1379
+ %1379 = OpLabel
+ %1450 = OpCompositeExtract %float %975 1
+ %1451 = OpCompositeExtract %float %975 1
+ %1452 = OpCompositeConstruct %v2float %1450 %1451
%1453 = OpAccessChain %_ptr_Function_float %color %uint_0
- OpStore %1453 %1451
- %1454 = OpAccessChain %_ptr_Function_float %uv %uint_1
- %1455 = OpLoad %float %1454
- %1456 = OpLoad %QuicksortObject %obj
- OpStore %obj %100
- OpStore %obj %1456
- %1457 = OpCompositeExtract %float %1245 0
- %1458 = OpCompositeExtract %float %1245 1
- %1459 = OpCompositeConstruct %v2float %1457 %1458
- %1460 = OpAccessChain %_ptr_Function_float %uv %int_0
- %1461 = OpLoad %float %1460
- %1462 = OpAccessChain %_ptr_Function_float %uv %int_0
- OpStore %1462 %float_0
+ %1454 = OpLoad %float %1453
+ %1455 = OpAccessChain %_ptr_Function_float %color %uint_0
+ OpStore %1455 %float_0
+ %1456 = OpAccessChain %_ptr_Function_float %color %uint_0
+ OpStore %1456 %1454
+ %1457 = OpAccessChain %_ptr_Function_float %uv %uint_1
+ %1458 = OpLoad %float %1457
+ %1459 = OpLoad %QuicksortObject %obj
+ OpStore %obj %103
+ OpStore %obj %1459
+ %1460 = OpCompositeExtract %float %1248 0
+ %1461 = OpCompositeExtract %float %1248 1
+ %1462 = OpCompositeConstruct %v2float %1460 %1461
%1463 = OpAccessChain %_ptr_Function_float %uv %int_0
- OpStore %1463 %1461
- %1464 = OpAccessChain %_ptr_Function_float %color %uint_1
- %1465 = OpLoad %float %1464
- %1466 = OpAccessChain %_ptr_Function_float %color %uint_1
- OpStore %1466 %float_0
+ %1464 = OpLoad %float %1463
+ %1465 = OpAccessChain %_ptr_Function_float %uv %int_0
+ OpStore %1465 %float_0
+ %1466 = OpAccessChain %_ptr_Function_float %uv %int_0
+ OpStore %1466 %1464
%1467 = OpAccessChain %_ptr_Function_float %color %uint_1
- OpStore %1467 %1465
- %1468 = OpCompositeExtract %float %914 0
- %1469 = OpCompositeExtract %float %914 1
- %1470 = OpCompositeExtract %float %914 1
- %1471 = OpCompositeConstruct %v3float %1468 %1469 %1470
- %1472 = OpAccessChain %_ptr_Private_int %obj %uint_0 %int_4
- %1473 = OpLoad %int %1472
- %1474 = OpAccessChain %_ptr_Private_int %obj %uint_0 %int_4
- OpStore %1474 %int_0
+ %1468 = OpLoad %float %1467
+ %1469 = OpAccessChain %_ptr_Function_float %color %uint_1
+ OpStore %1469 %float_0
+ %1470 = OpAccessChain %_ptr_Function_float %color %uint_1
+ OpStore %1470 %1468
+ %1471 = OpCompositeExtract %float %917 0
+ %1472 = OpCompositeExtract %float %917 1
+ %1473 = OpCompositeExtract %float %917 1
+ %1474 = OpCompositeConstruct %v3float %1471 %1472 %1473
%1475 = OpAccessChain %_ptr_Private_int %obj %uint_0 %int_4
- OpStore %1475 %1473
- %1476 = OpFOrdGreaterThan %bool %1455 %float_0_75
- OpSelectionMerge %1477 None
- OpBranchConditional %1476 %1478 %1477
- %1478 = OpLabel
- %1479 = OpLoad %v3float %color
- OpStore %color %885
- OpStore %color %1479
- %1480 = OpAccessChain %_ptr_Function_float %color %uint_0
- %1481 = OpLoad %float %1480
- %1482 = OpAccessChain %_ptr_Function_float %color %uint_0
- OpStore %1482 %float_0
+ %1476 = OpLoad %int %1475
+ %1477 = OpAccessChain %_ptr_Private_int %obj %uint_0 %int_4
+ OpStore %1477 %int_0
+ %1478 = OpAccessChain %_ptr_Private_int %obj %uint_0 %int_4
+ OpStore %1478 %1476
+ %1479 = OpFOrdGreaterThan %bool %1458 %float_0_75
+ OpSelectionMerge %1480 None
+ OpBranchConditional %1479 %1481 %1480
+ %1481 = OpLabel
+ %1482 = OpLoad %v3float %color
+ OpStore %color %888
+ OpStore %color %1482
%1483 = OpAccessChain %_ptr_Function_float %color %uint_0
- OpStore %1483 %1481
- %1484 = OpCompositeExtract %float %921 1
- %1485 = OpCompositeExtract %float %921 0
- %1486 = OpCompositeExtract %float %921 1
- %1487 = OpCompositeConstruct %v3float %1484 %1485 %1486
- %1488 = OpLoad %v3float %color
- OpStore %color %885
- OpStore %color %1488
- %1490 = OpAccessChain %_ptr_Private_int %obj %uint_0 %int_7
- %1491 = OpLoad %int %1490
- %1492 = OpAccessChain %_ptr_Function_float %uv %uint_0
- %1493 = OpLoad %float %1492
- %1494 = OpAccessChain %_ptr_Function_float %uv %uint_0
- OpStore %1494 %float_0
+ %1484 = OpLoad %float %1483
+ %1485 = OpAccessChain %_ptr_Function_float %color %uint_0
+ OpStore %1485 %float_0
+ %1486 = OpAccessChain %_ptr_Function_float %color %uint_0
+ OpStore %1486 %1484
+ %1487 = OpCompositeExtract %float %924 1
+ %1488 = OpCompositeExtract %float %924 0
+ %1489 = OpCompositeExtract %float %924 1
+ %1490 = OpCompositeConstruct %v3float %1487 %1488 %1489
+ %1491 = OpLoad %v3float %color
+ OpStore %color %888
+ OpStore %color %1491
+ %1493 = OpAccessChain %_ptr_Private_int %obj %uint_0 %int_7
+ %1494 = OpLoad %int %1493
%1495 = OpAccessChain %_ptr_Function_float %uv %uint_0
- OpStore %1495 %1493
- %1496 = OpCompositeExtract %float %1245 0
- %1497 = OpCompositeExtract %float %1137 1
- %1498 = OpCompositeExtract %float %1137 0
- %1499 = OpCompositeConstruct %v3float %1496 %1497 %1498
- %1500 = OpAccessChain %_ptr_Function_float %color %uint_1
- %1501 = OpLoad %float %1500
- %1502 = OpAccessChain %_ptr_Function_float %color %uint_1
- OpStore %1502 %float_0
+ %1496 = OpLoad %float %1495
+ %1497 = OpAccessChain %_ptr_Function_float %uv %uint_0
+ OpStore %1497 %float_0
+ %1498 = OpAccessChain %_ptr_Function_float %uv %uint_0
+ OpStore %1498 %1496
+ %1499 = OpCompositeExtract %float %1248 0
+ %1500 = OpCompositeExtract %float %1140 1
+ %1501 = OpCompositeExtract %float %1140 0
+ %1502 = OpCompositeConstruct %v3float %1499 %1500 %1501
%1503 = OpAccessChain %_ptr_Function_float %color %uint_1
- OpStore %1503 %1501
- %1504 = OpCompositeExtract %float %1263 0
- %1505 = OpCompositeExtract %float %1055 1
- %1506 = OpCompositeConstruct %v2float %1504 %1505
- %1507 = OpAccessChain %_ptr_Private_int %obj %uint_0 %uint_0
- %1508 = OpLoad %int %1507
- %1509 = OpAccessChain %_ptr_Private_int %obj %uint_0 %uint_0
- OpStore %1509 %int_0
+ %1504 = OpLoad %float %1503
+ %1505 = OpAccessChain %_ptr_Function_float %color %uint_1
+ OpStore %1505 %float_0
+ %1506 = OpAccessChain %_ptr_Function_float %color %uint_1
+ OpStore %1506 %1504
+ %1507 = OpCompositeExtract %float %1266 0
+ %1508 = OpCompositeExtract %float %1058 1
+ %1509 = OpCompositeConstruct %v2float %1507 %1508
%1510 = OpAccessChain %_ptr_Private_int %obj %uint_0 %uint_0
- OpStore %1510 %1508
- %1511 = OpAccessChain %_ptr_Function_float %color %uint_1
- %1512 = OpLoad %float %1511
- %1513 = OpAccessChain %_ptr_Function_float %color %uint_1
- OpStore %1513 %float_0
+ %1511 = OpLoad %int %1510
+ %1512 = OpAccessChain %_ptr_Private_int %obj %uint_0 %uint_0
+ OpStore %1512 %int_0
+ %1513 = OpAccessChain %_ptr_Private_int %obj %uint_0 %uint_0
+ OpStore %1513 %1511
%1514 = OpAccessChain %_ptr_Function_float %color %uint_1
- OpStore %1514 %1512
- %1515 = OpCompositeExtract %float %1274 0
- %1516 = OpCompositeExtract %float %1274 1
- %1517 = OpCompositeExtract %float %1274 0
- %1518 = OpCompositeConstruct %v3float %1515 %1516 %1517
- %1519 = OpAccessChain %_ptr_Function_float %color %uint_0
- %1520 = OpLoad %float %1519
- %1521 = OpAccessChain %_ptr_Function_float %color %uint_0
- OpStore %1521 %float_0
+ %1515 = OpLoad %float %1514
+ %1516 = OpAccessChain %_ptr_Function_float %color %uint_1
+ OpStore %1516 %float_0
+ %1517 = OpAccessChain %_ptr_Function_float %color %uint_1
+ OpStore %1517 %1515
+ %1518 = OpCompositeExtract %float %1277 0
+ %1519 = OpCompositeExtract %float %1277 1
+ %1520 = OpCompositeExtract %float %1277 0
+ %1521 = OpCompositeConstruct %v3float %1518 %1519 %1520
%1522 = OpAccessChain %_ptr_Function_float %color %uint_0
- OpStore %1522 %1520
- %1523 = OpAccessChain %_ptr_Function_float %color %uint_2
- %1524 = OpLoad %float %1523
- %1525 = OpAccessChain %_ptr_Function_float %uv %uint_1
- %1526 = OpLoad %float %1525
- %1527 = OpAccessChain %_ptr_Function_float %uv %uint_1
- OpStore %1527 %float_0
+ %1523 = OpLoad %float %1522
+ %1524 = OpAccessChain %_ptr_Function_float %color %uint_0
+ OpStore %1524 %float_0
+ %1525 = OpAccessChain %_ptr_Function_float %color %uint_0
+ OpStore %1525 %1523
+ %1526 = OpAccessChain %_ptr_Function_float %color %uint_2
+ %1527 = OpLoad %float %1526
%1528 = OpAccessChain %_ptr_Function_float %uv %uint_1
- OpStore %1528 %1526
- %1529 = OpCompositeExtract %float %897 0
- %1530 = OpCompositeExtract %float %897 1
- %1531 = OpCompositeConstruct %v2float %1529 %1530
- %1532 = OpAccessChain %_ptr_Function_float %uv %uint_0
- %1533 = OpLoad %float %1532
- %1534 = OpAccessChain %_ptr_Function_float %uv %uint_0
- OpStore %1534 %float_0
+ %1529 = OpLoad %float %1528
+ %1530 = OpAccessChain %_ptr_Function_float %uv %uint_1
+ OpStore %1530 %float_0
+ %1531 = OpAccessChain %_ptr_Function_float %uv %uint_1
+ OpStore %1531 %1529
+ %1532 = OpCompositeExtract %float %900 0
+ %1533 = OpCompositeExtract %float %900 1
+ %1534 = OpCompositeConstruct %v2float %1532 %1533
%1535 = OpAccessChain %_ptr_Function_float %uv %uint_0
- OpStore %1535 %1533
- %1536 = OpAccessChain %_ptr_Function_float %uv %uint_1
- %1537 = OpLoad %float %1536
- %1538 = OpAccessChain %_ptr_Function_float %uv %uint_1
- OpStore %1538 %float_0
+ %1536 = OpLoad %float %1535
+ %1537 = OpAccessChain %_ptr_Function_float %uv %uint_0
+ OpStore %1537 %float_0
+ %1538 = OpAccessChain %_ptr_Function_float %uv %uint_0
+ OpStore %1538 %1536
%1539 = OpAccessChain %_ptr_Function_float %uv %uint_1
- OpStore %1539 %1537
- %1540 = OpAccessChain %_ptr_Function_float %uv %uint_1
- %1541 = OpLoad %float %1540
+ %1540 = OpLoad %float %1539
+ %1541 = OpAccessChain %_ptr_Function_float %uv %uint_1
+ OpStore %1541 %float_0
%1542 = OpAccessChain %_ptr_Function_float %uv %uint_1
- OpStore %1542 %float_0
+ OpStore %1542 %1540
%1543 = OpAccessChain %_ptr_Function_float %uv %uint_1
- OpStore %1543 %1541
- %1544 = OpCompositeExtract %float %1531 1
- %1545 = OpCompositeExtract %float %1531 1
- %1546 = OpCompositeExtract %float %1471 2
- %1547 = OpCompositeConstruct %v3float %1544 %1545 %1546
- %1548 = OpAccessChain %_ptr_Function_float %color %uint_2
- %1549 = OpLoad %float %1548
- %1550 = OpAccessChain %_ptr_Function_float %color %uint_2
- OpStore %1550 %float_0
+ %1544 = OpLoad %float %1543
+ %1545 = OpAccessChain %_ptr_Function_float %uv %uint_1
+ OpStore %1545 %float_0
+ %1546 = OpAccessChain %_ptr_Function_float %uv %uint_1
+ OpStore %1546 %1544
+ %1547 = OpCompositeExtract %float %1534 1
+ %1548 = OpCompositeExtract %float %1534 1
+ %1549 = OpCompositeExtract %float %1474 2
+ %1550 = OpCompositeConstruct %v3float %1547 %1548 %1549
%1551 = OpAccessChain %_ptr_Function_float %color %uint_2
- OpStore %1551 %1549
- %1552 = OpAccessChain %_ptr_Function_float %color %uint_2
- %1553 = OpConvertSToF %float %1491
- %1554 = OpFAdd %float %1553 %1524
- OpStore %1552 %1554
- %1555 = OpAccessChain %_ptr_Function_float %color %uint_1
- %1556 = OpLoad %float %1555
- %1557 = OpAccessChain %_ptr_Function_float %color %uint_1
- OpStore %1557 %float_0
+ %1552 = OpLoad %float %1551
+ %1553 = OpAccessChain %_ptr_Function_float %color %uint_2
+ OpStore %1553 %float_0
+ %1554 = OpAccessChain %_ptr_Function_float %color %uint_2
+ OpStore %1554 %1552
+ %1555 = OpAccessChain %_ptr_Function_float %color %uint_2
+ %1556 = OpConvertSToF %float %1494
+ %1557 = OpFAdd %float %1556 %1527
+ OpStore %1555 %1557
%1558 = OpAccessChain %_ptr_Function_float %color %uint_1
- OpStore %1558 %1556
- %1559 = OpCompositeExtract %float %959 0
- %1560 = OpCompositeExtract %float %959 2
- %1561 = OpCompositeConstruct %v2float %1559 %1560
- %1562 = OpAccessChain %_ptr_Function_float %color %uint_0
- %1563 = OpLoad %float %1562
- %1564 = OpAccessChain %_ptr_Function_float %color %uint_0
- OpStore %1564 %float_0
+ %1559 = OpLoad %float %1558
+ %1560 = OpAccessChain %_ptr_Function_float %color %uint_1
+ OpStore %1560 %float_0
+ %1561 = OpAccessChain %_ptr_Function_float %color %uint_1
+ OpStore %1561 %1559
+ %1562 = OpCompositeExtract %float %962 0
+ %1563 = OpCompositeExtract %float %962 2
+ %1564 = OpCompositeConstruct %v2float %1562 %1563
%1565 = OpAccessChain %_ptr_Function_float %color %uint_0
- OpStore %1565 %1563
- OpBranch %1477
- %1477 = OpLabel
- %1566 = OpLoad %int %i_2
+ %1566 = OpLoad %float %1565
+ %1567 = OpAccessChain %_ptr_Function_float %color %uint_0
+ OpStore %1567 %float_0
+ %1568 = OpAccessChain %_ptr_Function_float %color %uint_0
+ OpStore %1568 %1566
+ OpBranch %1480
+ %1480 = OpLabel
+ %1569 = OpLoad %int %i_2
OpStore %i_2 %int_0
- OpStore %i_2 %1566
- %1567 = OpCompositeExtract %float %932 1
- %1568 = OpCompositeExtract %float %921 1
- %1569 = OpCompositeConstruct %v2float %1567 %1568
- %1570 = OpLoad %v2float %uv
- OpStore %uv %873
- OpStore %uv %1570
- %1572 = OpAccessChain %_ptr_Private_int %obj %uint_0 %int_8
- %1573 = OpLoad %int %1572
- %1574 = OpLoad %int %i_2
+ OpStore %i_2 %1569
+ %1570 = OpCompositeExtract %float %935 1
+ %1571 = OpCompositeExtract %float %924 1
+ %1572 = OpCompositeConstruct %v2float %1570 %1571
+ %1573 = OpLoad %v2float %uv
+ OpStore %uv %876
+ OpStore %uv %1573
+ %1575 = OpAccessChain %_ptr_Private_int %obj %uint_0 %int_8
+ %1576 = OpLoad %int %1575
+ %1577 = OpLoad %int %i_2
OpStore %i_2 %int_0
- OpStore %i_2 %1574
- %1575 = OpCompositeExtract %float %905 0
- %1576 = OpCompositeExtract %float %932 2
- %1577 = OpCompositeConstruct %v2float %1575 %1576
- %1578 = OpAccessChain %_ptr_Private_int %obj %uint_0 %int_8
- %1579 = OpLoad %int %1578
- %1580 = OpAccessChain %_ptr_Private_int %obj %uint_0 %int_8
- OpStore %1580 %int_0
+ OpStore %i_2 %1577
+ %1578 = OpCompositeExtract %float %908 0
+ %1579 = OpCompositeExtract %float %935 2
+ %1580 = OpCompositeConstruct %v2float %1578 %1579
%1581 = OpAccessChain %_ptr_Private_int %obj %uint_0 %int_8
- OpStore %1581 %1579
- %1582 = OpAccessChain %_ptr_Function_float %color %uint_1
- %1583 = OpLoad %float %1582
- %1584 = OpAccessChain %_ptr_Function_float %color %uint_1
- OpStore %1584 %float_0
+ %1582 = OpLoad %int %1581
+ %1583 = OpAccessChain %_ptr_Private_int %obj %uint_0 %int_8
+ OpStore %1583 %int_0
+ %1584 = OpAccessChain %_ptr_Private_int %obj %uint_0 %int_8
+ OpStore %1584 %1582
%1585 = OpAccessChain %_ptr_Function_float %color %uint_1
- OpStore %1585 %1583
- %1586 = OpCompositeExtract %float %959 1
- %1587 = OpCompositeExtract %float %873 0
- %1588 = OpCompositeConstruct %v2float %1586 %1587
- %1589 = OpAccessChain %_ptr_Function_float %color %uint_0
- %1590 = OpLoad %float %1589
- %1591 = OpAccessChain %_ptr_Function_float %color %uint_0
- OpStore %1591 %float_0
+ %1586 = OpLoad %float %1585
+ %1587 = OpAccessChain %_ptr_Function_float %color %uint_1
+ OpStore %1587 %float_0
+ %1588 = OpAccessChain %_ptr_Function_float %color %uint_1
+ OpStore %1588 %1586
+ %1589 = OpCompositeExtract %float %962 1
+ %1590 = OpCompositeExtract %float %876 0
+ %1591 = OpCompositeConstruct %v2float %1589 %1590
%1592 = OpAccessChain %_ptr_Function_float %color %uint_0
- OpStore %1592 %1590
- %1593 = OpCompositeExtract %float %1588 0
- %1594 = OpCompositeExtract %float %1588 1
- %1595 = OpCompositeExtract %float %1588 0
- %1596 = OpCompositeConstruct %v3float %1593 %1594 %1595
- %1597 = OpAccessChain %_ptr_Function_float %color %uint_2
- %1598 = OpLoad %float %1597
- %1599 = OpAccessChain %_ptr_Function_float %color %uint_2
- OpStore %1599 %float_0
+ %1593 = OpLoad %float %1592
+ %1594 = OpAccessChain %_ptr_Function_float %color %uint_0
+ OpStore %1594 %float_0
+ %1595 = OpAccessChain %_ptr_Function_float %color %uint_0
+ OpStore %1595 %1593
+ %1596 = OpCompositeExtract %float %1591 0
+ %1597 = OpCompositeExtract %float %1591 1
+ %1598 = OpCompositeExtract %float %1591 0
+ %1599 = OpCompositeConstruct %v3float %1596 %1597 %1598
%1600 = OpAccessChain %_ptr_Function_float %color %uint_2
- OpStore %1600 %1598
- %1601 = OpAccessChain %_ptr_Function_float %color %uint_2
- %1602 = OpLoad %float %1601
- %1603 = OpAccessChain %_ptr_Function_float %color %uint_0
- %1604 = OpLoad %float %1603
- %1605 = OpAccessChain %_ptr_Function_float %color %uint_0
- OpStore %1605 %float_0
+ %1601 = OpLoad %float %1600
+ %1602 = OpAccessChain %_ptr_Function_float %color %uint_2
+ OpStore %1602 %float_0
+ %1603 = OpAccessChain %_ptr_Function_float %color %uint_2
+ OpStore %1603 %1601
+ %1604 = OpAccessChain %_ptr_Function_float %color %uint_2
+ %1605 = OpLoad %float %1604
%1606 = OpAccessChain %_ptr_Function_float %color %uint_0
- OpStore %1606 %1604
- %1607 = OpCompositeExtract %float %1459 0
- %1608 = OpCompositeExtract %float %1449 0
- %1609 = OpCompositeConstruct %v2float %1607 %1608
- %1610 = OpAccessChain %_ptr_Private_int %obj %uint_0 %int_4
- %1611 = OpLoad %int %1610
- %1612 = OpAccessChain %_ptr_Private_int %obj %uint_0 %int_4
- OpStore %1612 %int_0
+ %1607 = OpLoad %float %1606
+ %1608 = OpAccessChain %_ptr_Function_float %color %uint_0
+ OpStore %1608 %float_0
+ %1609 = OpAccessChain %_ptr_Function_float %color %uint_0
+ OpStore %1609 %1607
+ %1610 = OpCompositeExtract %float %1462 0
+ %1611 = OpCompositeExtract %float %1452 0
+ %1612 = OpCompositeConstruct %v2float %1610 %1611
%1613 = OpAccessChain %_ptr_Private_int %obj %uint_0 %int_4
- OpStore %1613 %1611
- %1614 = OpAccessChain %_ptr_Function_float %uv %uint_1
- %1615 = OpLoad %float %1614
- %1616 = OpAccessChain %_ptr_Function_float %uv %uint_1
- OpStore %1616 %float_0
+ %1614 = OpLoad %int %1613
+ %1615 = OpAccessChain %_ptr_Private_int %obj %uint_0 %int_4
+ OpStore %1615 %int_0
+ %1616 = OpAccessChain %_ptr_Private_int %obj %uint_0 %int_4
+ OpStore %1616 %1614
%1617 = OpAccessChain %_ptr_Function_float %uv %uint_1
- OpStore %1617 %1615
- %1618 = OpCompositeExtract %float %1055 0
- %1619 = OpCompositeExtract %float %901 0
- %1620 = OpCompositeConstruct %v2float %1618 %1619
- %1621 = OpAccessChain %_ptr_Function_float %color %uint_1
- %1622 = OpLoad %float %1621
- %1623 = OpAccessChain %_ptr_Function_float %color %uint_1
- OpStore %1623 %float_0
+ %1618 = OpLoad %float %1617
+ %1619 = OpAccessChain %_ptr_Function_float %uv %uint_1
+ OpStore %1619 %float_0
+ %1620 = OpAccessChain %_ptr_Function_float %uv %uint_1
+ OpStore %1620 %1618
+ %1621 = OpCompositeExtract %float %1058 0
+ %1622 = OpCompositeExtract %float %904 0
+ %1623 = OpCompositeConstruct %v2float %1621 %1622
%1624 = OpAccessChain %_ptr_Function_float %color %uint_1
- OpStore %1624 %1622
- %1625 = OpAccessChain %_ptr_Function_float %color %uint_2
- %1626 = OpConvertSToF %float %1573
- %1627 = OpFAdd %float %1602 %1626
- OpStore %1625 %1627
- %1628 = OpLoad %v2float %uv
- OpStore %uv %873
- OpStore %uv %1628
- %1629 = OpAccessChain %_ptr_Function_float %uv %uint_0
- %1630 = OpLoad %float %1629
- %1631 = OpAccessChain %_ptr_Function_float %uv %uint_0
- OpStore %1631 %float_0
+ %1625 = OpLoad %float %1624
+ %1626 = OpAccessChain %_ptr_Function_float %color %uint_1
+ OpStore %1626 %float_0
+ %1627 = OpAccessChain %_ptr_Function_float %color %uint_1
+ OpStore %1627 %1625
+ %1628 = OpAccessChain %_ptr_Function_float %color %uint_2
+ %1629 = OpConvertSToF %float %1576
+ %1630 = OpFAdd %float %1605 %1629
+ OpStore %1628 %1630
+ %1631 = OpLoad %v2float %uv
+ OpStore %uv %876
+ OpStore %uv %1631
%1632 = OpAccessChain %_ptr_Function_float %uv %uint_0
- OpStore %1632 %1630
- %1633 = OpCompositeExtract %float %1055 1
- %1634 = OpCompositeExtract %float %1055 0
- %1635 = OpCompositeExtract %float %1609 1
- %1636 = OpCompositeConstruct %v3float %1633 %1634 %1635
- %1637 = OpAccessChain %_ptr_Function_float %uv %uint_0
- %1638 = OpLoad %float %1637
- %1639 = OpAccessChain %_ptr_Function_float %uv %uint_0
- OpStore %1639 %float_0
+ %1633 = OpLoad %float %1632
+ %1634 = OpAccessChain %_ptr_Function_float %uv %uint_0
+ OpStore %1634 %float_0
+ %1635 = OpAccessChain %_ptr_Function_float %uv %uint_0
+ OpStore %1635 %1633
+ %1636 = OpCompositeExtract %float %1058 1
+ %1637 = OpCompositeExtract %float %1058 0
+ %1638 = OpCompositeExtract %float %1612 1
+ %1639 = OpCompositeConstruct %v3float %1636 %1637 %1638
%1640 = OpAccessChain %_ptr_Function_float %uv %uint_0
- OpStore %1640 %1638
- %1641 = OpAccessChain %_ptr_Function_float %uv %uint_0
- %1642 = OpLoad %float %1641
- %1643 = OpAccessChain %_ptr_Function_float %color %uint_1
- %1644 = OpLoad %float %1643
- %1645 = OpAccessChain %_ptr_Function_float %color %uint_1
- OpStore %1645 %float_0
+ %1641 = OpLoad %float %1640
+ %1642 = OpAccessChain %_ptr_Function_float %uv %uint_0
+ OpStore %1642 %float_0
+ %1643 = OpAccessChain %_ptr_Function_float %uv %uint_0
+ OpStore %1643 %1641
+ %1644 = OpAccessChain %_ptr_Function_float %uv %uint_0
+ %1645 = OpLoad %float %1644
%1646 = OpAccessChain %_ptr_Function_float %color %uint_1
- OpStore %1646 %1644
- %1647 = OpCompositeExtract %float %1577 1
- %1648 = OpCompositeExtract %float %1577 0
- %1649 = OpCompositeExtract %float %909 2
- %1650 = OpCompositeConstruct %v3float %1647 %1648 %1649
- %1651 = OpAccessChain %_ptr_Function_float %uv %uint_1
- %1652 = OpLoad %float %1651
- %1653 = OpAccessChain %_ptr_Function_float %uv %uint_1
- OpStore %1653 %float_0
+ %1647 = OpLoad %float %1646
+ %1648 = OpAccessChain %_ptr_Function_float %color %uint_1
+ OpStore %1648 %float_0
+ %1649 = OpAccessChain %_ptr_Function_float %color %uint_1
+ OpStore %1649 %1647
+ %1650 = OpCompositeExtract %float %1580 1
+ %1651 = OpCompositeExtract %float %1580 0
+ %1652 = OpCompositeExtract %float %912 2
+ %1653 = OpCompositeConstruct %v3float %1650 %1651 %1652
%1654 = OpAccessChain %_ptr_Function_float %uv %uint_1
- OpStore %1654 %1652
- %1655 = OpAccessChain %_ptr_Function_float %uv %uint_1
- %1656 = OpLoad %float %1655
+ %1655 = OpLoad %float %1654
+ %1656 = OpAccessChain %_ptr_Function_float %uv %uint_1
+ OpStore %1656 %float_0
%1657 = OpAccessChain %_ptr_Function_float %uv %uint_1
- %1658 = OpLoad %float %1657
- %1659 = OpAccessChain %_ptr_Function_float %uv %uint_1
- OpStore %1659 %float_0
+ OpStore %1657 %1655
+ %1658 = OpAccessChain %_ptr_Function_float %uv %uint_1
+ %1659 = OpLoad %float %1658
%1660 = OpAccessChain %_ptr_Function_float %uv %uint_1
- OpStore %1660 %1658
- %1661 = OpAccessChain %_ptr_Function_float %color %uint_2
- %1662 = OpLoad %float %1661
- %1663 = OpAccessChain %_ptr_Function_float %color %uint_2
- OpStore %1663 %float_0
+ %1661 = OpLoad %float %1660
+ %1662 = OpAccessChain %_ptr_Function_float %uv %uint_1
+ OpStore %1662 %float_0
+ %1663 = OpAccessChain %_ptr_Function_float %uv %uint_1
+ OpStore %1663 %1661
%1664 = OpAccessChain %_ptr_Function_float %color %uint_2
- OpStore %1664 %1662
- %1665 = OpCompositeExtract %float %35 1
- %1666 = OpCompositeExtract %float %1360 1
- %1667 = OpCompositeExtract %float %1360 2
- %1668 = OpCompositeConstruct %v3float %1665 %1666 %1667
- %1669 = OpAccessChain %_ptr_Function_float %color %uint_2
- %1670 = OpLoad %float %1669
- %1671 = OpAccessChain %_ptr_Function_float %color %uint_2
- OpStore %1671 %float_0
+ %1665 = OpLoad %float %1664
+ %1666 = OpAccessChain %_ptr_Function_float %color %uint_2
+ OpStore %1666 %float_0
+ %1667 = OpAccessChain %_ptr_Function_float %color %uint_2
+ OpStore %1667 %1665
+ %1668 = OpCompositeExtract %float %38 1
+ %1669 = OpCompositeExtract %float %1363 1
+ %1670 = OpCompositeExtract %float %1363 2
+ %1671 = OpCompositeConstruct %v3float %1668 %1669 %1670
%1672 = OpAccessChain %_ptr_Function_float %color %uint_2
- OpStore %1672 %1670
- %1673 = OpLoad %int %i_2
+ %1673 = OpLoad %float %1672
+ %1674 = OpAccessChain %_ptr_Function_float %color %uint_2
+ OpStore %1674 %float_0
+ %1675 = OpAccessChain %_ptr_Function_float %color %uint_2
+ OpStore %1675 %1673
+ %1676 = OpLoad %int %i_2
OpStore %i_2 %int_0
- OpStore %i_2 %1673
- %1674 = OpCompositeExtract %float %1360 2
- %1675 = OpCompositeExtract %float %1360 1
- %1676 = OpCompositeConstruct %v2float %1674 %1675
- %1677 = OpLoad %v3float %color
- OpStore %color %885
- OpStore %color %1677
- %1678 = OpAccessChain %_ptr_Function_float %uv %uint_1
- %1679 = OpLoad %float %1678
- %1680 = OpAccessChain %_ptr_Function_float %uv %uint_1
- OpStore %1680 %float_0
+ OpStore %i_2 %1676
+ %1677 = OpCompositeExtract %float %1363 2
+ %1678 = OpCompositeExtract %float %1363 1
+ %1679 = OpCompositeConstruct %v2float %1677 %1678
+ %1680 = OpLoad %v3float %color
+ OpStore %color %888
+ OpStore %color %1680
%1681 = OpAccessChain %_ptr_Function_float %uv %uint_1
- OpStore %1681 %1679
- %1682 = OpCompositeExtract %float %972 1
- %1683 = OpCompositeExtract %float %972 1
- %1684 = OpCompositeExtract %float %972 1
- %1685 = OpCompositeConstruct %v3float %1682 %1683 %1684
- %1686 = OpAccessChain %_ptr_Private_int %obj %uint_0 %int_4
- %1687 = OpLoad %int %1686
- %1688 = OpAccessChain %_ptr_Private_int %obj %uint_0 %int_4
- OpStore %1688 %int_0
+ %1682 = OpLoad %float %1681
+ %1683 = OpAccessChain %_ptr_Function_float %uv %uint_1
+ OpStore %1683 %float_0
+ %1684 = OpAccessChain %_ptr_Function_float %uv %uint_1
+ OpStore %1684 %1682
+ %1685 = OpCompositeExtract %float %975 1
+ %1686 = OpCompositeExtract %float %975 1
+ %1687 = OpCompositeExtract %float %975 1
+ %1688 = OpCompositeConstruct %v3float %1685 %1686 %1687
%1689 = OpAccessChain %_ptr_Private_int %obj %uint_0 %int_4
- OpStore %1689 %1687
- %1692 = OpFSub %float %1642 %1656
- %1690 = OpExtInst %float %1691 FAbs %1692
- %1693 = OpFOrdLessThan %bool %1690 %float_0_25
- OpSelectionMerge %1694 None
- OpBranchConditional %1693 %1695 %1694
- %1695 = OpLabel
- %1696 = OpAccessChain %_ptr_Function_float %uv %uint_0
- %1697 = OpLoad %float %1696
- %1698 = OpAccessChain %_ptr_Function_float %uv %uint_0
- OpStore %1698 %float_0
+ %1690 = OpLoad %int %1689
+ %1691 = OpAccessChain %_ptr_Private_int %obj %uint_0 %int_4
+ OpStore %1691 %int_0
+ %1692 = OpAccessChain %_ptr_Private_int %obj %uint_0 %int_4
+ OpStore %1692 %1690
+ %1695 = OpFSub %float %1645 %1659
+ %1693 = OpExtInst %float %1694 FAbs %1695
+ %1696 = OpFOrdLessThan %bool %1693 %float_0_25
+ OpSelectionMerge %1697 None
+ OpBranchConditional %1696 %1698 %1697
+ %1698 = OpLabel
%1699 = OpAccessChain %_ptr_Function_float %uv %uint_0
- OpStore %1699 %1697
- %1700 = OpLoad %QuicksortObject %obj
- OpStore %obj %100
- OpStore %obj %1700
- %1701 = OpCompositeExtract %float %1596 2
- %1702 = OpCompositeExtract %float %1596 0
- %1703 = OpCompositeExtract %float %909 0
- %1704 = OpCompositeConstruct %v3float %1701 %1702 %1703
- %1705 = OpAccessChain %_ptr_Private_int %obj %uint_0 %int_8
- %1706 = OpLoad %int %1705
- %1707 = OpAccessChain %_ptr_Private_int %obj %uint_0 %int_8
- OpStore %1707 %int_0
+ %1700 = OpLoad %float %1699
+ %1701 = OpAccessChain %_ptr_Function_float %uv %uint_0
+ OpStore %1701 %float_0
+ %1702 = OpAccessChain %_ptr_Function_float %uv %uint_0
+ OpStore %1702 %1700
+ %1703 = OpLoad %QuicksortObject %obj
+ OpStore %obj %103
+ OpStore %obj %1703
+ %1704 = OpCompositeExtract %float %1599 2
+ %1705 = OpCompositeExtract %float %1599 0
+ %1706 = OpCompositeExtract %float %912 0
+ %1707 = OpCompositeConstruct %v3float %1704 %1705 %1706
%1708 = OpAccessChain %_ptr_Private_int %obj %uint_0 %int_8
- OpStore %1708 %1706
- %1710 = OpAccessChain %_ptr_Private_int %obj %uint_0 %uint_9
- %1711 = OpLoad %int %1710
- %1712 = OpCompositeExtract %float %1232 1
- %1713 = OpCompositeExtract %float %1232 1
- %1714 = OpCompositeExtract %float %1232 1
- %1715 = OpCompositeConstruct %v3float %1712 %1713 %1714
- %1716 = OpAccessChain %_ptr_Function_float %uv %uint_1
- %1717 = OpLoad %float %1716
- %1718 = OpAccessChain %_ptr_Function_float %uv %uint_1
- OpStore %1718 %float_0
+ %1709 = OpLoad %int %1708
+ %1710 = OpAccessChain %_ptr_Private_int %obj %uint_0 %int_8
+ OpStore %1710 %int_0
+ %1711 = OpAccessChain %_ptr_Private_int %obj %uint_0 %int_8
+ OpStore %1711 %1709
+ %1713 = OpAccessChain %_ptr_Private_int %obj %uint_0 %uint_9
+ %1714 = OpLoad %int %1713
+ %1715 = OpCompositeExtract %float %1235 1
+ %1716 = OpCompositeExtract %float %1235 1
+ %1717 = OpCompositeExtract %float %1235 1
+ %1718 = OpCompositeConstruct %v3float %1715 %1716 %1717
%1719 = OpAccessChain %_ptr_Function_float %uv %uint_1
- OpStore %1719 %1717
- %1720 = OpAccessChain %_ptr_Function_float %color %uint_0
- %1721 = OpLoad %float %1720
+ %1720 = OpLoad %float %1719
+ %1721 = OpAccessChain %_ptr_Function_float %uv %uint_1
+ OpStore %1721 %float_0
%1722 = OpAccessChain %_ptr_Function_float %uv %uint_1
- %1723 = OpLoad %float %1722
- %1724 = OpAccessChain %_ptr_Function_float %uv %uint_1
- OpStore %1724 %float_0
+ OpStore %1722 %1720
+ %1723 = OpAccessChain %_ptr_Function_float %color %uint_0
+ %1724 = OpLoad %float %1723
%1725 = OpAccessChain %_ptr_Function_float %uv %uint_1
- OpStore %1725 %1723
- %1726 = OpCompositeExtract %float %1569 0
- %1727 = OpCompositeExtract %float %1569 1
- %1728 = OpCompositeConstruct %v2float %1726 %1727
- %1729 = OpAccessChain %_ptr_Function_float %color %uint_0
- %1730 = OpLoad %float %1729
- %1731 = OpAccessChain %_ptr_Function_float %color %uint_0
- OpStore %1731 %float_0
+ %1726 = OpLoad %float %1725
+ %1727 = OpAccessChain %_ptr_Function_float %uv %uint_1
+ OpStore %1727 %float_0
+ %1728 = OpAccessChain %_ptr_Function_float %uv %uint_1
+ OpStore %1728 %1726
+ %1729 = OpCompositeExtract %float %1572 0
+ %1730 = OpCompositeExtract %float %1572 1
+ %1731 = OpCompositeConstruct %v2float %1729 %1730
%1732 = OpAccessChain %_ptr_Function_float %color %uint_0
- OpStore %1732 %1730
- %1733 = OpLoad %v3float %color
- OpStore %color %885
- OpStore %color %1733
- %1734 = OpCompositeExtract %float %953 0
- %1735 = OpCompositeExtract %float %953 0
- %1736 = OpCompositeConstruct %v2float %1734 %1735
- %1737 = OpLoad %v2float %uv
- OpStore %uv %873
- OpStore %uv %1737
- %1738 = OpAccessChain %_ptr_Function_float %uv %uint_0
- %1739 = OpLoad %float %1738
- %1740 = OpAccessChain %_ptr_Function_float %uv %uint_0
- OpStore %1740 %float_0
+ %1733 = OpLoad %float %1732
+ %1734 = OpAccessChain %_ptr_Function_float %color %uint_0
+ OpStore %1734 %float_0
+ %1735 = OpAccessChain %_ptr_Function_float %color %uint_0
+ OpStore %1735 %1733
+ %1736 = OpLoad %v3float %color
+ OpStore %color %888
+ OpStore %color %1736
+ %1737 = OpCompositeExtract %float %956 0
+ %1738 = OpCompositeExtract %float %956 0
+ %1739 = OpCompositeConstruct %v2float %1737 %1738
+ %1740 = OpLoad %v2float %uv
+ OpStore %uv %876
+ OpStore %uv %1740
%1741 = OpAccessChain %_ptr_Function_float %uv %uint_0
- OpStore %1741 %1739
- %1742 = OpCompositeExtract %float %873 0
- %1743 = OpCompositeExtract %float %873 0
- %1744 = OpCompositeExtract %float %873 1
- %1745 = OpCompositeConstruct %v3float %1742 %1743 %1744
- %1746 = OpAccessChain %_ptr_Function_float %color %uint_0
- %1747 = OpConvertSToF %float %1711
- %1748 = OpFAdd %float %1747 %1721
- OpStore %1746 %1748
+ %1742 = OpLoad %float %1741
+ %1743 = OpAccessChain %_ptr_Function_float %uv %uint_0
+ OpStore %1743 %float_0
+ %1744 = OpAccessChain %_ptr_Function_float %uv %uint_0
+ OpStore %1744 %1742
+ %1745 = OpCompositeExtract %float %876 0
+ %1746 = OpCompositeExtract %float %876 0
+ %1747 = OpCompositeExtract %float %876 1
+ %1748 = OpCompositeConstruct %v3float %1745 %1746 %1747
%1749 = OpAccessChain %_ptr_Function_float %color %uint_0
- %1750 = OpLoad %float %1749
- %1751 = OpAccessChain %_ptr_Function_float %color %uint_0
- OpStore %1751 %float_0
+ %1750 = OpConvertSToF %float %1714
+ %1751 = OpFAdd %float %1750 %1724
+ OpStore %1749 %1751
%1752 = OpAccessChain %_ptr_Function_float %color %uint_0
- OpStore %1752 %1750
- %1753 = OpCompositeExtract %float %1297 1
- %1754 = OpCompositeExtract %float %1636 0
- %1755 = OpCompositeExtract %float %1297 0
- %1756 = OpCompositeConstruct %v3float %1753 %1754 %1755
- %1757 = OpAccessChain %_ptr_Function_float %color %uint_0
- %1758 = OpLoad %float %1757
- %1759 = OpAccessChain %_ptr_Function_float %color %uint_0
- OpStore %1759 %float_0
+ %1753 = OpLoad %float %1752
+ %1754 = OpAccessChain %_ptr_Function_float %color %uint_0
+ OpStore %1754 %float_0
+ %1755 = OpAccessChain %_ptr_Function_float %color %uint_0
+ OpStore %1755 %1753
+ %1756 = OpCompositeExtract %float %1300 1
+ %1757 = OpCompositeExtract %float %1639 0
+ %1758 = OpCompositeExtract %float %1300 0
+ %1759 = OpCompositeConstruct %v3float %1756 %1757 %1758
%1760 = OpAccessChain %_ptr_Function_float %color %uint_0
- OpStore %1760 %1758
- OpBranch %1694
- %1694 = OpLabel
- %1761 = OpAccessChain %_ptr_Function_float %uv %uint_1
- %1762 = OpLoad %float %1761
- %1763 = OpAccessChain %_ptr_Function_float %uv %uint_1
- OpStore %1763 %float_0
+ %1761 = OpLoad %float %1760
+ %1762 = OpAccessChain %_ptr_Function_float %color %uint_0
+ OpStore %1762 %float_0
+ %1763 = OpAccessChain %_ptr_Function_float %color %uint_0
+ OpStore %1763 %1761
+ OpBranch %1697
+ %1697 = OpLabel
%1764 = OpAccessChain %_ptr_Function_float %uv %uint_1
- OpStore %1764 %1762
- %1765 = OpLoad %v3float %color
- %1766 = OpAccessChain %_ptr_Function_float %uv %int_0
- %1767 = OpLoad %float %1766
- %1768 = OpAccessChain %_ptr_Function_float %uv %int_0
- OpStore %1768 %float_0
+ %1765 = OpLoad %float %1764
+ %1766 = OpAccessChain %_ptr_Function_float %uv %uint_1
+ OpStore %1766 %float_0
+ %1767 = OpAccessChain %_ptr_Function_float %uv %uint_1
+ OpStore %1767 %1765
+ %1768 = OpLoad %v3float %color
%1769 = OpAccessChain %_ptr_Function_float %uv %int_0
- OpStore %1769 %1767
- %1770 = OpCompositeExtract %float %901 0
- %1771 = OpCompositeExtract %float %893 0
- %1772 = OpCompositeExtract %float %893 1
- %1773 = OpCompositeConstruct %v3float %1770 %1771 %1772
- %1774 = OpExtInst %v3float %1691 Normalize %1765
- %1775 = OpAccessChain %_ptr_Function_float %uv %uint_0
- %1776 = OpLoad %float %1775
- %1777 = OpAccessChain %_ptr_Function_float %uv %uint_0
- OpStore %1777 %float_0
+ %1770 = OpLoad %float %1769
+ %1771 = OpAccessChain %_ptr_Function_float %uv %int_0
+ OpStore %1771 %float_0
+ %1772 = OpAccessChain %_ptr_Function_float %uv %int_0
+ OpStore %1772 %1770
+ %1773 = OpCompositeExtract %float %904 0
+ %1774 = OpCompositeExtract %float %896 0
+ %1775 = OpCompositeExtract %float %896 1
+ %1776 = OpCompositeConstruct %v3float %1773 %1774 %1775
+ %1777 = OpExtInst %v3float %1694 Normalize %1768
%1778 = OpAccessChain %_ptr_Function_float %uv %uint_0
- OpStore %1778 %1776
- %1779 = OpLoad %QuicksortObject %obj
- OpStore %obj %100
- OpStore %obj %1779
- %1780 = OpLoad %QuicksortObject %obj
- OpStore %obj %100
- OpStore %obj %1780
- %1781 = OpAccessChain %_ptr_Function_float %color %uint_1
- %1782 = OpLoad %float %1781
- %1783 = OpAccessChain %_ptr_Function_float %color %uint_1
- OpStore %1783 %float_0
+ %1779 = OpLoad %float %1778
+ %1780 = OpAccessChain %_ptr_Function_float %uv %uint_0
+ OpStore %1780 %float_0
+ %1781 = OpAccessChain %_ptr_Function_float %uv %uint_0
+ OpStore %1781 %1779
+ %1782 = OpLoad %QuicksortObject %obj
+ OpStore %obj %103
+ OpStore %obj %1782
+ %1783 = OpLoad %QuicksortObject %obj
+ OpStore %obj %103
+ OpStore %obj %1783
%1784 = OpAccessChain %_ptr_Function_float %color %uint_1
- OpStore %1784 %1782
- %1785 = OpCompositeExtract %float %1609 1
- %1786 = OpCompositeExtract %float %1773 1
- %1787 = OpCompositeConstruct %v2float %1785 %1786
- %1788 = OpAccessChain %_ptr_Function_float %color %uint_1
- %1789 = OpLoad %float %1788
- %1790 = OpAccessChain %_ptr_Function_float %color %uint_1
- OpStore %1790 %float_0
+ %1785 = OpLoad %float %1784
+ %1786 = OpAccessChain %_ptr_Function_float %color %uint_1
+ OpStore %1786 %float_0
+ %1787 = OpAccessChain %_ptr_Function_float %color %uint_1
+ OpStore %1787 %1785
+ %1788 = OpCompositeExtract %float %1612 1
+ %1789 = OpCompositeExtract %float %1776 1
+ %1790 = OpCompositeConstruct %v2float %1788 %1789
%1791 = OpAccessChain %_ptr_Function_float %color %uint_1
- OpStore %1791 %1789
- %1792 = OpCompositeExtract %float %1774 0
- %1793 = OpCompositeExtract %float %1774 1
- %1794 = OpCompositeExtract %float %1774 2
- %1795 = OpCompositeConstruct %v4float %1792 %1793 %1794 %float_1
- %1796 = OpAccessChain %_ptr_Function_float %uv %uint_1
- %1797 = OpLoad %float %1796
- %1798 = OpAccessChain %_ptr_Function_float %uv %uint_1
- OpStore %1798 %float_0
+ %1792 = OpLoad %float %1791
+ %1793 = OpAccessChain %_ptr_Function_float %color %uint_1
+ OpStore %1793 %float_0
+ %1794 = OpAccessChain %_ptr_Function_float %color %uint_1
+ OpStore %1794 %1792
+ %1795 = OpCompositeExtract %float %1777 0
+ %1796 = OpCompositeExtract %float %1777 1
+ %1797 = OpCompositeExtract %float %1777 2
+ %1798 = OpCompositeConstruct %v4float %1795 %1796 %1797 %float_1
%1799 = OpAccessChain %_ptr_Function_float %uv %uint_1
- OpStore %1799 %1797
- %1800 = OpCompositeExtract %float %35 1
- %1801 = OpCompositeExtract %float %35 1
- %1802 = OpCompositeExtract %float %1787 1
- %1803 = OpCompositeConstruct %v3float %1800 %1801 %1802
- %1804 = OpAccessChain %_ptr_Function_float %uv %uint_0
- %1805 = OpLoad %float %1804
- %1806 = OpAccessChain %_ptr_Function_float %uv %uint_0
- OpStore %1806 %float_0
+ %1800 = OpLoad %float %1799
+ %1801 = OpAccessChain %_ptr_Function_float %uv %uint_1
+ OpStore %1801 %float_0
+ %1802 = OpAccessChain %_ptr_Function_float %uv %uint_1
+ OpStore %1802 %1800
+ %1803 = OpCompositeExtract %float %38 1
+ %1804 = OpCompositeExtract %float %38 1
+ %1805 = OpCompositeExtract %float %1790 1
+ %1806 = OpCompositeConstruct %v3float %1803 %1804 %1805
%1807 = OpAccessChain %_ptr_Function_float %uv %uint_0
- OpStore %1807 %1805
- OpStore %x_GLF_color %1795
- %1808 = OpLoad %QuicksortObject %obj
- OpStore %obj %100
- OpStore %obj %1808
- %1809 = OpCompositeExtract %float %1795 3
- %1810 = OpCompositeExtract %float %1795 1
- %1811 = OpCompositeExtract %float %1459 0
- %1812 = OpCompositeConstruct %v3float %1809 %1810 %1811
- %1813 = OpAccessChain %_ptr_Function_float %color %uint_0
- %1814 = OpLoad %float %1813
- %1815 = OpAccessChain %_ptr_Function_float %color %uint_0
- OpStore %1815 %float_0
+ %1808 = OpLoad %float %1807
+ %1809 = OpAccessChain %_ptr_Function_float %uv %uint_0
+ OpStore %1809 %float_0
+ %1810 = OpAccessChain %_ptr_Function_float %uv %uint_0
+ OpStore %1810 %1808
+ OpStore %x_GLF_color %1798
+ %1811 = OpLoad %QuicksortObject %obj
+ OpStore %obj %103
+ OpStore %obj %1811
+ %1812 = OpCompositeExtract %float %1798 3
+ %1813 = OpCompositeExtract %float %1798 1
+ %1814 = OpCompositeExtract %float %1462 0
+ %1815 = OpCompositeConstruct %v3float %1812 %1813 %1814
%1816 = OpAccessChain %_ptr_Function_float %color %uint_0
- OpStore %1816 %1814
+ %1817 = OpLoad %float %1816
+ %1818 = OpAccessChain %_ptr_Function_float %color %uint_0
+ OpStore %1818 %float_0
+ %1819 = OpAccessChain %_ptr_Function_float %color %uint_0
+ OpStore %1819 %1817
+ OpReturn
+ OpFunctionEnd
+%tint_symbol_3 = OpFunction %void None %1820
+%tint_symbol_1 = OpFunctionParameter %main_out
+ %1824 = OpLabel
+ %1825 = OpCompositeExtract %v4float %tint_symbol_1 0
+ OpStore %tint_symbol_2 %1825
+ OpReturn
+ OpFunctionEnd
+ %main = OpFunction %void None %419
+ %1827 = OpLabel
+ %1828 = OpLoad %v4float %tint_symbol
+ OpStore %gl_FragCoord %1828
+ %1829 = OpFunctionCall %void %main_1
+ %1831 = OpLoad %v4float %x_GLF_color
+ %1832 = OpCompositeConstruct %main_out %1831
+ %1830 = OpFunctionCall %void %tint_symbol_3 %1832
OpReturn
OpFunctionEnd
diff --git a/test/bug/tint/749.spvasm.expected.wgsl b/test/bug/tint/749.spvasm.expected.wgsl
index 48bb5b7..f24a266 100644
--- a/test/bug/tint/749.spvasm.expected.wgsl
+++ b/test/bug/tint/749.spvasm.expected.wgsl
@@ -9,11 +9,11 @@
var<private> obj : QuicksortObject;
-[[builtin(position)]] var<in> gl_FragCoord : vec4<f32>;
+var<private> gl_FragCoord : vec4<f32>;
[[group(0), binding(0)]] var<uniform> x_188 : buf0;
-[[location(0)]] var<out> x_GLF_color : vec4<f32>;
+var<private> x_GLF_color : vec4<f32>;
fn swap_i1_i1_(i : ptr<function, i32>, j : ptr<function, i32>) {
var temp : i32;
@@ -770,8 +770,7 @@
return;
}
-[[stage(fragment)]]
-fn main() {
+fn main_1() {
var color : vec3<f32>;
var i_2 : i32;
var uv : vec2<f32>;
@@ -1492,3 +1491,15 @@
*(x_208) = x_931;
return;
}
+
+struct main_out {
+ [[location(0)]]
+ x_GLF_color : vec4<f32>;
+};
+
+[[stage(fragment)]]
+fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
+ gl_FragCoord = gl_FragCoord_param;
+ main_1();
+ return main_out(x_GLF_color);
+}
diff --git a/test/bug/tint/757.wgsl.expected.msl b/test/bug/tint/757.wgsl.expected.msl
index 4df311b..7501d7a 100644
--- a/test/bug/tint/757.wgsl.expected.msl
+++ b/test/bug/tint/757.wgsl.expected.msl
@@ -1,19 +1,34 @@
-SKIP: FAILED
+#include <metal_stdlib>
-bug/tint/757.wgsl:3:5 warning: use of deprecated language feature: [[offset]] has been replaced with [[size]] and [[align]]
- [[offset(0)]] level : i32;
- ^^^^^^
+using namespace metal;
+struct Constants {
+ /* 0x0000 */ int level;
+};
+struct Result {
+ /* 0x0000 */ float values[1];
+};
-bug/tint/757.wgsl:10:5 warning: use of deprecated language feature: [[offset]] has been replaced with [[size]] and [[align]]
- [[offset(0)]] values : [[stride(4)]] array<f32>;
- ^^^^^^
+kernel void tint_symbol(texture2d_array<float, access::sample> tint_symbol_2 [[texture(1)]], uint3 GlobalInvocationID [[thread_position_in_grid]], device Result& result [[buffer(3)]]) {
+ uint flatIndex = ((((2u * 2u) * GlobalInvocationID.z) + (2u * GlobalInvocationID.y)) + GlobalInvocationID.x);
+ flatIndex = (flatIndex * 1u);
+ float4 texel = tint_symbol_2.read(uint2(int2(GlobalInvocationID.xy)), 0, 0);
+ {
+ uint i = 0u;
+ {
+ bool tint_msl_is_first_1 = true;
+ for(;;) {
+ if (!tint_msl_is_first_1) {
+ i = (i + 1u);
+ }
+ tint_msl_is_first_1 = false;
+ if (!((i < 1u))) {
+ break;
+ }
+ result.values[(flatIndex + i)] = texel.r;
+ }
+ }
+ }
+ return;
+}
-
-Validation Failure:
-
-Compilation failed:
-
-program_source:14:18: error: use of undeclared identifier 'myTexture'
- float4 texel = myTexture.read(int2(GlobalInvocationID.xy), 0, 0);
- ^
diff --git a/test/bug/tint/827.wgsl.expected.msl b/test/bug/tint/827.wgsl.expected.msl
index e326fda..3570acd 100644
--- a/test/bug/tint/827.wgsl.expected.msl
+++ b/test/bug/tint/827.wgsl.expected.msl
@@ -1,15 +1,13 @@
-SKIP: FAILED
+#include <metal_stdlib>
-bug/tint/827.wgsl:8:26 warning: use of deprecated language feature: declare access with var<storage, read_write> instead of using [[access]] decoration
-[[group(0), binding(1)]] var<storage> result : [[access(read_write)]] Result;
- ^^^
+using namespace metal;
+struct Result {
+ /* 0x0000 */ float values[1];
+};
+constant uint width = 128u;
+kernel void tint_symbol(depth2d<float, access::sample> tint_symbol_2 [[texture(0)]], uint3 GlobalInvocationId [[thread_position_in_grid]], device Result& result [[buffer(1)]]) {
+ result.values[((GlobalInvocationId.y * width) + GlobalInvocationId.x)] = tint_symbol_2.read(uint2(int2(int(GlobalInvocationId.x), int(GlobalInvocationId.y))), 0);
+ return;
+}
-
-Validation Failure:
-
-Compilation failed:
-
-program_source:10:76: error: use of undeclared identifier 'tex'
- result.values[((GlobalInvocationId.y * width) + GlobalInvocationId.x)] = tex.read(int2(int(GlobalInvocationId.x), int(GlobalInvocationId.y)), 0);
- ^
diff --git a/test/bug/tint/870.spvasm.expected.hlsl b/test/bug/tint/870.spvasm.expected.hlsl
index 56649a2..7cb227e 100644
--- a/test/bug/tint/870.spvasm.expected.hlsl
+++ b/test/bug/tint/870.spvasm.expected.hlsl
@@ -9,7 +9,7 @@
ByteAddressBuffer sspp962805860buildInformation : register(t2, space0);
-void main() {
+void main_1() {
tint_array_wrapper orientation = {{0, 0, 0, 0, 0, 0}};
const tint_array_wrapper x_23 = tint_symbol_1(sspp962805860buildInformation, 36u);
orientation.arr[0] = x_23.arr[0u];
@@ -20,3 +20,8 @@
orientation.arr[5] = x_23.arr[5u];
return;
}
+
+void main() {
+ main_1();
+ return;
+}
diff --git a/test/bug/tint/870.spvasm.expected.msl b/test/bug/tint/870.spvasm.expected.msl
index 0ca37a8..b97dede 100644
--- a/test/bug/tint/870.spvasm.expected.msl
+++ b/test/bug/tint/870.spvasm.expected.msl
@@ -14,7 +14,7 @@
/* 0x0000 */ sspp962805860buildInformationS passthru;
};
-fragment void tint_symbol(const device x_B4_BuildInformation& sspp962805860buildInformation [[buffer(2)]]) {
+void main_1(const device x_B4_BuildInformation& sspp962805860buildInformation) {
tint_array_wrapper orientation = {};
tint_array_wrapper const x_23 = sspp962805860buildInformation.passthru.orientation;
orientation.arr[0] = x_23.arr[0u];
@@ -26,3 +26,8 @@
return;
}
+fragment void tint_symbol(const device x_B4_BuildInformation& sspp962805860buildInformation [[buffer(2)]]) {
+ main_1(sspp962805860buildInformation);
+ return;
+}
+
diff --git a/test/bug/tint/870.spvasm.expected.spvasm b/test/bug/tint/870.spvasm.expected.spvasm
index d40b60b..d502dda 100644
--- a/test/bug/tint/870.spvasm.expected.spvasm
+++ b/test/bug/tint/870.spvasm.expected.spvasm
@@ -1,7 +1,7 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 46
+; Bound: 49
; Schema: 0
OpCapability Shader
OpMemoryModel Logical GLSL450
@@ -15,8 +15,9 @@
OpMemberName %sspp962805860buildInformationS 2 "essence"
OpMemberName %sspp962805860buildInformationS 3 "orientation"
OpName %sspp962805860buildInformation "sspp962805860buildInformation"
- OpName %main "main"
+ OpName %main_1 "main_1"
OpName %orientation "orientation"
+ OpName %main "main"
OpDecorate %x_B4_BuildInformation Block
OpMemberDecorate %x_B4_BuildInformation 0 Offset 0
OpMemberDecorate %sspp962805860buildInformationS 0 Offset 0
@@ -55,7 +56,7 @@
%uint_4 = OpConstant %uint 4
%int_5 = OpConstant %int 5
%uint_5 = OpConstant %uint 5
- %main = OpFunction %void None %11
+ %main_1 = OpFunction %void None %11
%14 = OpLabel
%orientation = OpVariable %_ptr_Function__arr_int_uint_6 Function %17
%21 = OpAccessChain %_ptr_StorageBuffer__arr_int_uint_6 %sspp962805860buildInformation %uint_0 %uint_3
@@ -80,3 +81,8 @@
OpStore %43 %45
OpReturn
OpFunctionEnd
+ %main = OpFunction %void None %11
+ %47 = OpLabel
+ %48 = OpFunctionCall %void %main_1
+ OpReturn
+ OpFunctionEnd
diff --git a/test/bug/tint/870.spvasm.expected.wgsl b/test/bug/tint/870.spvasm.expected.wgsl
index e6818c3..7729cc1 100644
--- a/test/bug/tint/870.spvasm.expected.wgsl
+++ b/test/bug/tint/870.spvasm.expected.wgsl
@@ -14,8 +14,7 @@
[[group(0), binding(2)]] var<storage, read> sspp962805860buildInformation : x_B4_BuildInformation;
-[[stage(fragment)]]
-fn main() {
+fn main_1() {
var orientation : array<i32, 6>;
let x_23 : Arr = sspp962805860buildInformation.passthru.orientation;
orientation[0] = x_23[0u];
@@ -26,3 +25,8 @@
orientation[5] = x_23[5u];
return;
}
+
+[[stage(fragment)]]
+fn main() {
+ main_1();
+}
diff --git a/test/intrinsics/gen/textureSampleCompareLevel/011a8f.wgsl.expected.msl b/test/intrinsics/gen/textureSampleCompareLevel/011a8f.wgsl.expected.msl
index 5e2ddd2..1d5f63f 100644
--- a/test/intrinsics/gen/textureSampleCompareLevel/011a8f.wgsl.expected.msl
+++ b/test/intrinsics/gen/textureSampleCompareLevel/011a8f.wgsl.expected.msl
@@ -1,14 +1,27 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_symbol {
+ float4 value [[position]];
+};
+void textureSampleCompareLevel_011a8f(depth2d_array<float, access::sample> tint_symbol_2, sampler tint_symbol_3) {
+ float res = tint_symbol_2.sample_compare(tint_symbol_3, float2(), 1, 1.0f, level(0), int2());
+}
-Validation Failure:
+vertex tint_symbol vertex_main(depth2d_array<float, access::sample> tint_symbol_4 [[texture(0)]], sampler tint_symbol_5 [[sampler(1)]]) {
+ textureSampleCompareLevel_011a8f(tint_symbol_4, tint_symbol_5);
+ tint_symbol const tint_symbol_1 = {.value=float4()};
+ return tint_symbol_1;
+}
-Compilation failed:
+fragment void fragment_main(depth2d_array<float, access::sample> tint_symbol_6 [[texture(0)]], sampler tint_symbol_7 [[sampler(1)]]) {
+ textureSampleCompareLevel_011a8f(tint_symbol_6, tint_symbol_7);
+ return;
+}
-program_source:9:15: error: use of undeclared identifier 'arg_0'
- float res = arg_0.sample_compare(arg_1, float2(), 1, 1.0f, level(0), int2());
- ^
-program_source:9:36: error: use of undeclared identifier 'arg_1'
- float res = arg_0.sample_compare(arg_1, float2(), 1, 1.0f, level(0), int2());
- ^
+kernel void compute_main(depth2d_array<float, access::sample> tint_symbol_8 [[texture(0)]], sampler tint_symbol_9 [[sampler(1)]]) {
+ textureSampleCompareLevel_011a8f(tint_symbol_8, tint_symbol_9);
+ return;
+}
+
diff --git a/test/intrinsics/gen/textureSampleCompareLevel/1116ed.wgsl.expected.msl b/test/intrinsics/gen/textureSampleCompareLevel/1116ed.wgsl.expected.msl
index 0f3eb0d..1501fc5 100644
--- a/test/intrinsics/gen/textureSampleCompareLevel/1116ed.wgsl.expected.msl
+++ b/test/intrinsics/gen/textureSampleCompareLevel/1116ed.wgsl.expected.msl
@@ -1,14 +1,27 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_symbol {
+ float4 value [[position]];
+};
+void textureSampleCompareLevel_1116ed(depth2d_array<float, access::sample> tint_symbol_2, sampler tint_symbol_3) {
+ float res = tint_symbol_2.sample_compare(tint_symbol_3, float2(), 1, 1.0f, level(0));
+}
-Validation Failure:
+vertex tint_symbol vertex_main(depth2d_array<float, access::sample> tint_symbol_4 [[texture(0)]], sampler tint_symbol_5 [[sampler(1)]]) {
+ textureSampleCompareLevel_1116ed(tint_symbol_4, tint_symbol_5);
+ tint_symbol const tint_symbol_1 = {.value=float4()};
+ return tint_symbol_1;
+}
-Compilation failed:
+fragment void fragment_main(depth2d_array<float, access::sample> tint_symbol_6 [[texture(0)]], sampler tint_symbol_7 [[sampler(1)]]) {
+ textureSampleCompareLevel_1116ed(tint_symbol_6, tint_symbol_7);
+ return;
+}
-program_source:9:15: error: use of undeclared identifier 'arg_0'
- float res = arg_0.sample_compare(arg_1, float2(), 1, 1.0f, level(0));
- ^
-program_source:9:36: error: use of undeclared identifier 'arg_1'
- float res = arg_0.sample_compare(arg_1, float2(), 1, 1.0f, level(0));
- ^
+kernel void compute_main(depth2d_array<float, access::sample> tint_symbol_8 [[texture(0)]], sampler tint_symbol_9 [[sampler(1)]]) {
+ textureSampleCompareLevel_1116ed(tint_symbol_8, tint_symbol_9);
+ return;
+}
+
diff --git a/test/intrinsics/gen/textureSampleCompareLevel/1568e3.wgsl.expected.msl b/test/intrinsics/gen/textureSampleCompareLevel/1568e3.wgsl.expected.msl
index 89da216..6382fd5 100644
--- a/test/intrinsics/gen/textureSampleCompareLevel/1568e3.wgsl.expected.msl
+++ b/test/intrinsics/gen/textureSampleCompareLevel/1568e3.wgsl.expected.msl
@@ -1,14 +1,27 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_symbol {
+ float4 value [[position]];
+};
+void textureSampleCompareLevel_1568e3(depthcube<float, access::sample> tint_symbol_2, sampler tint_symbol_3) {
+ float res = tint_symbol_2.sample_compare(tint_symbol_3, float3(), 1.0f, level(0));
+}
-Validation Failure:
+vertex tint_symbol vertex_main(depthcube<float, access::sample> tint_symbol_4 [[texture(0)]], sampler tint_symbol_5 [[sampler(1)]]) {
+ textureSampleCompareLevel_1568e3(tint_symbol_4, tint_symbol_5);
+ tint_symbol const tint_symbol_1 = {.value=float4()};
+ return tint_symbol_1;
+}
-Compilation failed:
+fragment void fragment_main(depthcube<float, access::sample> tint_symbol_6 [[texture(0)]], sampler tint_symbol_7 [[sampler(1)]]) {
+ textureSampleCompareLevel_1568e3(tint_symbol_6, tint_symbol_7);
+ return;
+}
-program_source:9:15: error: use of undeclared identifier 'arg_0'
- float res = arg_0.sample_compare(arg_1, float3(), 1.0f, level(0));
- ^
-program_source:9:36: error: use of undeclared identifier 'arg_1'
- float res = arg_0.sample_compare(arg_1, float3(), 1.0f, level(0));
- ^
+kernel void compute_main(depthcube<float, access::sample> tint_symbol_8 [[texture(0)]], sampler tint_symbol_9 [[sampler(1)]]) {
+ textureSampleCompareLevel_1568e3(tint_symbol_8, tint_symbol_9);
+ return;
+}
+
diff --git a/test/intrinsics/gen/textureSampleCompareLevel/2ad2b1.wgsl.expected.msl b/test/intrinsics/gen/textureSampleCompareLevel/2ad2b1.wgsl.expected.msl
index 06b9504..c838bed 100644
--- a/test/intrinsics/gen/textureSampleCompareLevel/2ad2b1.wgsl.expected.msl
+++ b/test/intrinsics/gen/textureSampleCompareLevel/2ad2b1.wgsl.expected.msl
@@ -1,14 +1,27 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_symbol {
+ float4 value [[position]];
+};
+void textureSampleCompareLevel_2ad2b1(depth2d<float, access::sample> tint_symbol_2, sampler tint_symbol_3) {
+ float res = tint_symbol_2.sample_compare(tint_symbol_3, float2(), 1.0f, level(0));
+}
-Validation Failure:
+vertex tint_symbol vertex_main(depth2d<float, access::sample> tint_symbol_4 [[texture(0)]], sampler tint_symbol_5 [[sampler(1)]]) {
+ textureSampleCompareLevel_2ad2b1(tint_symbol_4, tint_symbol_5);
+ tint_symbol const tint_symbol_1 = {.value=float4()};
+ return tint_symbol_1;
+}
-Compilation failed:
+fragment void fragment_main(depth2d<float, access::sample> tint_symbol_6 [[texture(0)]], sampler tint_symbol_7 [[sampler(1)]]) {
+ textureSampleCompareLevel_2ad2b1(tint_symbol_6, tint_symbol_7);
+ return;
+}
-program_source:9:15: error: use of undeclared identifier 'arg_0'
- float res = arg_0.sample_compare(arg_1, float2(), 1.0f, level(0));
- ^
-program_source:9:36: error: use of undeclared identifier 'arg_1'
- float res = arg_0.sample_compare(arg_1, float2(), 1.0f, level(0));
- ^
+kernel void compute_main(depth2d<float, access::sample> tint_symbol_8 [[texture(0)]], sampler tint_symbol_9 [[sampler(1)]]) {
+ textureSampleCompareLevel_2ad2b1(tint_symbol_8, tint_symbol_9);
+ return;
+}
+
diff --git a/test/intrinsics/gen/textureSampleCompareLevel/4cf3a2.wgsl.expected.msl b/test/intrinsics/gen/textureSampleCompareLevel/4cf3a2.wgsl.expected.msl
index 8d09590..d7a3b56 100644
--- a/test/intrinsics/gen/textureSampleCompareLevel/4cf3a2.wgsl.expected.msl
+++ b/test/intrinsics/gen/textureSampleCompareLevel/4cf3a2.wgsl.expected.msl
@@ -1,14 +1,27 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_symbol {
+ float4 value [[position]];
+};
+void textureSampleCompareLevel_4cf3a2(depthcube_array<float, access::sample> tint_symbol_2, sampler tint_symbol_3) {
+ float res = tint_symbol_2.sample_compare(tint_symbol_3, float3(), 1, 1.0f, level(0));
+}
-Validation Failure:
+vertex tint_symbol vertex_main(depthcube_array<float, access::sample> tint_symbol_4 [[texture(0)]], sampler tint_symbol_5 [[sampler(1)]]) {
+ textureSampleCompareLevel_4cf3a2(tint_symbol_4, tint_symbol_5);
+ tint_symbol const tint_symbol_1 = {.value=float4()};
+ return tint_symbol_1;
+}
-Compilation failed:
+fragment void fragment_main(depthcube_array<float, access::sample> tint_symbol_6 [[texture(0)]], sampler tint_symbol_7 [[sampler(1)]]) {
+ textureSampleCompareLevel_4cf3a2(tint_symbol_6, tint_symbol_7);
+ return;
+}
-program_source:9:15: error: use of undeclared identifier 'arg_0'
- float res = arg_0.sample_compare(arg_1, float3(), 1, 1.0f, level(0));
- ^
-program_source:9:36: error: use of undeclared identifier 'arg_1'
- float res = arg_0.sample_compare(arg_1, float3(), 1, 1.0f, level(0));
- ^
+kernel void compute_main(depthcube_array<float, access::sample> tint_symbol_8 [[texture(0)]], sampler tint_symbol_9 [[sampler(1)]]) {
+ textureSampleCompareLevel_4cf3a2(tint_symbol_8, tint_symbol_9);
+ return;
+}
+
diff --git a/test/intrinsics/gen/textureSampleCompareLevel/f8121c.wgsl.expected.msl b/test/intrinsics/gen/textureSampleCompareLevel/f8121c.wgsl.expected.msl
index 21f108a..485e108 100644
--- a/test/intrinsics/gen/textureSampleCompareLevel/f8121c.wgsl.expected.msl
+++ b/test/intrinsics/gen/textureSampleCompareLevel/f8121c.wgsl.expected.msl
@@ -1,14 +1,27 @@
-SKIP: FAILED
+#include <metal_stdlib>
+using namespace metal;
+struct tint_symbol {
+ float4 value [[position]];
+};
+void textureSampleCompareLevel_f8121c(depth2d<float, access::sample> tint_symbol_2, sampler tint_symbol_3) {
+ float res = tint_symbol_2.sample_compare(tint_symbol_3, float2(), 1.0f, level(0), int2());
+}
-Validation Failure:
+vertex tint_symbol vertex_main(depth2d<float, access::sample> tint_symbol_4 [[texture(0)]], sampler tint_symbol_5 [[sampler(1)]]) {
+ textureSampleCompareLevel_f8121c(tint_symbol_4, tint_symbol_5);
+ tint_symbol const tint_symbol_1 = {.value=float4()};
+ return tint_symbol_1;
+}
-Compilation failed:
+fragment void fragment_main(depth2d<float, access::sample> tint_symbol_6 [[texture(0)]], sampler tint_symbol_7 [[sampler(1)]]) {
+ textureSampleCompareLevel_f8121c(tint_symbol_6, tint_symbol_7);
+ return;
+}
-program_source:9:15: error: use of undeclared identifier 'arg_0'
- float res = arg_0.sample_compare(arg_1, float2(), 1.0f, level(0), int2());
- ^
-program_source:9:36: error: use of undeclared identifier 'arg_1'
- float res = arg_0.sample_compare(arg_1, float2(), 1.0f, level(0), int2());
- ^
+kernel void compute_main(depth2d<float, access::sample> tint_symbol_8 [[texture(0)]], sampler tint_symbol_9 [[sampler(1)]]) {
+ textureSampleCompareLevel_f8121c(tint_symbol_8, tint_symbol_9);
+ return;
+}
+
diff --git a/test/ptr_ref/access/matrix.spvasm.expected.hlsl b/test/ptr_ref/access/matrix.spvasm.expected.hlsl
index 0b1e541..0dfd7df 100644
--- a/test/ptr_ref/access/matrix.spvasm.expected.hlsl
+++ b/test/ptr_ref/access/matrix.spvasm.expected.hlsl
@@ -1,7 +1,12 @@
-[numthreads(1, 1, 1)]
-void main() {
+void main_1() {
float3x3 m = float3x3(float3(0.0f, 0.0f, 0.0f), float3(0.0f, 0.0f, 0.0f), float3(0.0f, 0.0f, 0.0f));
m = float3x3(float3(1.0f, 2.0f, 3.0f), float3(4.0f, 5.0f, 6.0f), float3(7.0f, 8.0f, 9.0f));
m[1] = float3(5.0f, 5.0f, 5.0f);
return;
}
+
+[numthreads(1, 1, 1)]
+void main() {
+ main_1();
+ return;
+}
diff --git a/test/ptr_ref/access/matrix.spvasm.expected.msl b/test/ptr_ref/access/matrix.spvasm.expected.msl
index beac5b5..355f903 100644
--- a/test/ptr_ref/access/matrix.spvasm.expected.msl
+++ b/test/ptr_ref/access/matrix.spvasm.expected.msl
@@ -1,10 +1,15 @@
#include <metal_stdlib>
using namespace metal;
-kernel void tint_symbol() {
+void main_1() {
float3x3 m = float3x3(float3(0.0f, 0.0f, 0.0f), float3(0.0f, 0.0f, 0.0f), float3(0.0f, 0.0f, 0.0f));
m = float3x3(float3(1.0f, 2.0f, 3.0f), float3(4.0f, 5.0f, 6.0f), float3(7.0f, 8.0f, 9.0f));
m[1] = float3(5.0f, 5.0f, 5.0f);
return;
}
+kernel void tint_symbol() {
+ main_1();
+ return;
+}
+
diff --git a/test/ptr_ref/access/matrix.spvasm.expected.spvasm b/test/ptr_ref/access/matrix.spvasm.expected.spvasm
index 762777b..7f83834 100644
--- a/test/ptr_ref/access/matrix.spvasm.expected.spvasm
+++ b/test/ptr_ref/access/matrix.spvasm.expected.spvasm
@@ -1,14 +1,15 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 32
+; Bound: 35
; Schema: 0
OpCapability Shader
OpMemoryModel Logical GLSL450
OpEntryPoint GLCompute %main "main"
OpExecutionMode %main LocalSize 1 1 1
- OpName %main "main"
+ OpName %main_1 "main_1"
OpName %m "m"
+ OpName %main "main"
%void = OpTypeVoid
%1 = OpTypeFunction %void
%float = OpTypeFloat 32
@@ -36,7 +37,7 @@
%int_1 = OpConstant %int 1
%_ptr_Function_v3float = OpTypePointer Function %v3float
%31 = OpConstantComposite %v3float %float_5 %float_5 %float_5
- %main = OpFunction %void None %1
+ %main_1 = OpFunction %void None %1
%4 = OpLabel
%m = OpVariable %_ptr_Function_mat3v3float Function %13
OpStore %m %10
@@ -45,3 +46,8 @@
OpStore %30 %31
OpReturn
OpFunctionEnd
+ %main = OpFunction %void None %1
+ %33 = OpLabel
+ %34 = OpFunctionCall %void %main_1
+ OpReturn
+ OpFunctionEnd
diff --git a/test/ptr_ref/access/matrix.spvasm.expected.wgsl b/test/ptr_ref/access/matrix.spvasm.expected.wgsl
index dabe5d4..9318800 100644
--- a/test/ptr_ref/access/matrix.spvasm.expected.wgsl
+++ b/test/ptr_ref/access/matrix.spvasm.expected.wgsl
@@ -1,7 +1,11 @@
-[[stage(compute)]]
-fn main() {
+fn main_1() {
var m : mat3x3<f32> = mat3x3<f32>(vec3<f32>(0.0, 0.0, 0.0), vec3<f32>(0.0, 0.0, 0.0), vec3<f32>(0.0, 0.0, 0.0));
m = mat3x3<f32>(vec3<f32>(1.0, 2.0, 3.0), vec3<f32>(4.0, 5.0, 6.0), vec3<f32>(7.0, 8.0, 9.0));
m[1] = vec3<f32>(5.0, 5.0, 5.0);
return;
}
+
+[[stage(compute)]]
+fn main() {
+ main_1();
+}
diff --git a/test/ptr_ref/access/vector.spvasm.expected.hlsl b/test/ptr_ref/access/vector.spvasm.expected.hlsl
index d1fb5ff..1249175 100644
--- a/test/ptr_ref/access/vector.spvasm.expected.hlsl
+++ b/test/ptr_ref/access/vector.spvasm.expected.hlsl
@@ -1,7 +1,12 @@
-[numthreads(1, 1, 1)]
-void main() {
+void main_1() {
float3 v = float3(0.0f, 0.0f, 0.0f);
v = float3(1.0f, 2.0f, 3.0f);
v.y = 5.0f;
return;
}
+
+[numthreads(1, 1, 1)]
+void main() {
+ main_1();
+ return;
+}
diff --git a/test/ptr_ref/access/vector.spvasm.expected.msl b/test/ptr_ref/access/vector.spvasm.expected.msl
index 650c752..2d93596 100644
--- a/test/ptr_ref/access/vector.spvasm.expected.msl
+++ b/test/ptr_ref/access/vector.spvasm.expected.msl
@@ -1,10 +1,15 @@
#include <metal_stdlib>
using namespace metal;
-kernel void tint_symbol() {
+void main_1() {
float3 v = float3(0.0f, 0.0f, 0.0f);
v = float3(1.0f, 2.0f, 3.0f);
v.y = 5.0f;
return;
}
+kernel void tint_symbol() {
+ main_1();
+ return;
+}
+
diff --git a/test/ptr_ref/access/vector.spvasm.expected.spvasm b/test/ptr_ref/access/vector.spvasm.expected.spvasm
index 5d2c915..bfedf84 100644
--- a/test/ptr_ref/access/vector.spvasm.expected.spvasm
+++ b/test/ptr_ref/access/vector.spvasm.expected.spvasm
@@ -1,14 +1,15 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 21
+; Bound: 24
; Schema: 0
OpCapability Shader
OpMemoryModel Logical GLSL450
OpEntryPoint GLCompute %main "main"
OpExecutionMode %main LocalSize 1 1 1
- OpName %main "main"
+ OpName %main_1 "main_1"
OpName %v "v"
+ OpName %main "main"
%void = OpTypeVoid
%1 = OpTypeFunction %void
%float = OpTypeFloat 32
@@ -25,7 +26,7 @@
%uint_1 = OpConstant %uint 1
%_ptr_Function_float = OpTypePointer Function %float
%float_5 = OpConstant %float 5
- %main = OpFunction %void None %1
+ %main_1 = OpFunction %void None %1
%4 = OpLabel
%v = OpVariable %_ptr_Function_v3float Function %11
OpStore %v %8
@@ -34,3 +35,8 @@
OpStore %19 %float_5
OpReturn
OpFunctionEnd
+ %main = OpFunction %void None %1
+ %22 = OpLabel
+ %23 = OpFunctionCall %void %main_1
+ OpReturn
+ OpFunctionEnd
diff --git a/test/ptr_ref/access/vector.spvasm.expected.wgsl b/test/ptr_ref/access/vector.spvasm.expected.wgsl
index dce7b8f..1c01974 100644
--- a/test/ptr_ref/access/vector.spvasm.expected.wgsl
+++ b/test/ptr_ref/access/vector.spvasm.expected.wgsl
@@ -1,7 +1,11 @@
-[[stage(compute)]]
-fn main() {
+fn main_1() {
var v : vec3<f32> = vec3<f32>(0.0, 0.0, 0.0);
v = vec3<f32>(1.0, 2.0, 3.0);
v.y = 5.0;
return;
}
+
+[[stage(compute)]]
+fn main() {
+ main_1();
+}
diff --git a/test/ptr_ref/copy/ptr_copy.spvasm.expected.hlsl b/test/ptr_ref/copy/ptr_copy.spvasm.expected.hlsl
index cd118a7..0bc2907 100644
--- a/test/ptr_ref/copy/ptr_copy.spvasm.expected.hlsl
+++ b/test/ptr_ref/copy/ptr_copy.spvasm.expected.hlsl
@@ -1,5 +1,10 @@
+void main_1() {
+ uint x_10 = 0u;
+ return;
+}
+
[numthreads(1, 1, 1)]
void main() {
- uint x_10 = 0u;
+ main_1();
return;
}
diff --git a/test/ptr_ref/copy/ptr_copy.spvasm.expected.msl b/test/ptr_ref/copy/ptr_copy.spvasm.expected.msl
index 6577255..5495c63 100644
--- a/test/ptr_ref/copy/ptr_copy.spvasm.expected.msl
+++ b/test/ptr_ref/copy/ptr_copy.spvasm.expected.msl
@@ -1,10 +1,15 @@
#include <metal_stdlib>
using namespace metal;
-kernel void tint_symbol() {
+void main_1() {
uint x_10 = 0u;
thread uint* const x_1 = &(x_10);
thread uint* const x_2 = x_1;
return;
}
+kernel void tint_symbol() {
+ main_1();
+ return;
+}
+
diff --git a/test/ptr_ref/copy/ptr_copy.spvasm.expected.spvasm b/test/ptr_ref/copy/ptr_copy.spvasm.expected.spvasm
index 2ced51c..bf3b294 100644
--- a/test/ptr_ref/copy/ptr_copy.spvasm.expected.spvasm
+++ b/test/ptr_ref/copy/ptr_copy.spvasm.expected.spvasm
@@ -1,21 +1,27 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 9
+; Bound: 12
; Schema: 0
OpCapability Shader
OpMemoryModel Logical GLSL450
OpEntryPoint GLCompute %main "main"
OpExecutionMode %main LocalSize 1 1 1
- OpName %main "main"
+ OpName %main_1 "main_1"
OpName %x_10 "x_10"
+ OpName %main "main"
%void = OpTypeVoid
%1 = OpTypeFunction %void
%uint = OpTypeInt 32 0
%_ptr_Function_uint = OpTypePointer Function %uint
%8 = OpConstantNull %uint
- %main = OpFunction %void None %1
+ %main_1 = OpFunction %void None %1
%4 = OpLabel
%x_10 = OpVariable %_ptr_Function_uint Function %8
OpReturn
OpFunctionEnd
+ %main = OpFunction %void None %1
+ %10 = OpLabel
+ %11 = OpFunctionCall %void %main_1
+ OpReturn
+ OpFunctionEnd
diff --git a/test/ptr_ref/copy/ptr_copy.spvasm.expected.wgsl b/test/ptr_ref/copy/ptr_copy.spvasm.expected.wgsl
index ef4c546..360caf4 100644
--- a/test/ptr_ref/copy/ptr_copy.spvasm.expected.wgsl
+++ b/test/ptr_ref/copy/ptr_copy.spvasm.expected.wgsl
@@ -1,7 +1,11 @@
-[[stage(compute)]]
-fn main() {
+fn main_1() {
var x_10 : u32;
let x_1 : ptr<function, u32> = &(x_10);
let x_2 : ptr<function, u32> = x_1;
return;
}
+
+[[stage(compute)]]
+fn main() {
+ main_1();
+}
diff --git a/test/ptr_ref/load/global/i32.spvasm.expected.hlsl b/test/ptr_ref/load/global/i32.spvasm.expected.hlsl
index c105145..949fd0b 100644
--- a/test/ptr_ref/load/global/i32.spvasm.expected.hlsl
+++ b/test/ptr_ref/load/global/i32.spvasm.expected.hlsl
@@ -1,8 +1,13 @@
static int I = 0;
-[numthreads(1, 1, 1)]
-void main() {
+void main_1() {
const int x_9 = I;
const int x_11 = (x_9 + 1);
return;
}
+
+[numthreads(1, 1, 1)]
+void main() {
+ main_1();
+ return;
+}
diff --git a/test/ptr_ref/load/global/i32.spvasm.expected.msl b/test/ptr_ref/load/global/i32.spvasm.expected.msl
index b12f809..58c70f5 100644
--- a/test/ptr_ref/load/global/i32.spvasm.expected.msl
+++ b/test/ptr_ref/load/global/i32.spvasm.expected.msl
@@ -1,10 +1,15 @@
#include <metal_stdlib>
using namespace metal;
-kernel void tint_symbol() {
- thread int tint_symbol_1 = 0;
- int const x_9 = tint_symbol_1;
+void main_1(thread int* const tint_symbol_1) {
+ int const x_9 = *(tint_symbol_1);
int const x_11 = (x_9 + 1);
return;
}
+kernel void tint_symbol() {
+ thread int tint_symbol_2 = 0;
+ main_1(&(tint_symbol_2));
+ return;
+}
+
diff --git a/test/ptr_ref/load/global/i32.spvasm.expected.spvasm b/test/ptr_ref/load/global/i32.spvasm.expected.spvasm
index df45400..c105555 100644
--- a/test/ptr_ref/load/global/i32.spvasm.expected.spvasm
+++ b/test/ptr_ref/load/global/i32.spvasm.expected.spvasm
@@ -1,13 +1,14 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 12
+; Bound: 15
; Schema: 0
OpCapability Shader
OpMemoryModel Logical GLSL450
OpEntryPoint GLCompute %main "main"
OpExecutionMode %main LocalSize 1 1 1
OpName %I "I"
+ OpName %main_1 "main_1"
OpName %main "main"
%int = OpTypeInt 32 1
%int_0 = OpConstant %int 0
@@ -16,9 +17,14 @@
%void = OpTypeVoid
%5 = OpTypeFunction %void
%int_1 = OpConstant %int 1
- %main = OpFunction %void None %5
+ %main_1 = OpFunction %void None %5
%8 = OpLabel
%9 = OpLoad %int %I
%11 = OpIAdd %int %9 %int_1
OpReturn
OpFunctionEnd
+ %main = OpFunction %void None %5
+ %13 = OpLabel
+ %14 = OpFunctionCall %void %main_1
+ OpReturn
+ OpFunctionEnd
diff --git a/test/ptr_ref/load/global/i32.spvasm.expected.wgsl b/test/ptr_ref/load/global/i32.spvasm.expected.wgsl
index ba8f551..f9147e4 100644
--- a/test/ptr_ref/load/global/i32.spvasm.expected.wgsl
+++ b/test/ptr_ref/load/global/i32.spvasm.expected.wgsl
@@ -1,8 +1,12 @@
var<private> I : i32 = 0;
-[[stage(compute)]]
-fn main() {
+fn main_1() {
let x_9 : i32 = I;
let x_11 : i32 = (x_9 + 1);
return;
}
+
+[[stage(compute)]]
+fn main() {
+ main_1();
+}
diff --git a/test/ptr_ref/load/global/struct_field.spvasm.expected.hlsl b/test/ptr_ref/load/global/struct_field.spvasm.expected.hlsl
index f966e8b..038d7fc 100644
--- a/test/ptr_ref/load/global/struct_field.spvasm.expected.hlsl
+++ b/test/ptr_ref/load/global/struct_field.spvasm.expected.hlsl
@@ -4,10 +4,15 @@
static S V;
-[numthreads(1, 1, 1)]
-void main() {
+void main_1() {
int i = 0;
const int x_15 = V.i;
i = x_15;
return;
}
+
+[numthreads(1, 1, 1)]
+void main() {
+ main_1();
+ return;
+}
diff --git a/test/ptr_ref/load/global/struct_field.spvasm.expected.msl b/test/ptr_ref/load/global/struct_field.spvasm.expected.msl
index e1c1520..5ac3552 100644
--- a/test/ptr_ref/load/global/struct_field.spvasm.expected.msl
+++ b/test/ptr_ref/load/global/struct_field.spvasm.expected.msl
@@ -5,11 +5,16 @@
int i;
};
-kernel void tint_symbol() {
- thread S tint_symbol_1 = {};
+void main_1(thread S* const tint_symbol_1) {
int i = 0;
- int const x_15 = tint_symbol_1.i;
+ int const x_15 = (*(tint_symbol_1)).i;
i = x_15;
return;
}
+kernel void tint_symbol() {
+ thread S tint_symbol_2 = {};
+ main_1(&(tint_symbol_2));
+ return;
+}
+
diff --git a/test/ptr_ref/load/global/struct_field.spvasm.expected.spvasm b/test/ptr_ref/load/global/struct_field.spvasm.expected.spvasm
index 2a1da68..a6960ac 100644
--- a/test/ptr_ref/load/global/struct_field.spvasm.expected.spvasm
+++ b/test/ptr_ref/load/global/struct_field.spvasm.expected.spvasm
@@ -1,7 +1,7 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 18
+; Bound: 21
; Schema: 0
OpCapability Shader
OpMemoryModel Logical GLSL450
@@ -10,8 +10,9 @@
OpName %S "S"
OpMemberName %S 0 "i"
OpName %V "V"
- OpName %main "main"
+ OpName %main_1 "main_1"
OpName %i "i"
+ OpName %main "main"
OpMemberDecorate %S 0 Offset 0
%int = OpTypeInt 32 1
%S = OpTypeStruct %int
@@ -25,7 +26,7 @@
%uint = OpTypeInt 32 0
%uint_0 = OpConstant %uint 0
%_ptr_Private_int = OpTypePointer Private %int
- %main = OpFunction %void None %6
+ %main_1 = OpFunction %void None %6
%9 = OpLabel
%i = OpVariable %_ptr_Function_int Function %12
%16 = OpAccessChain %_ptr_Private_int %V %uint_0
@@ -33,3 +34,8 @@
OpStore %i %17
OpReturn
OpFunctionEnd
+ %main = OpFunction %void None %6
+ %19 = OpLabel
+ %20 = OpFunctionCall %void %main_1
+ OpReturn
+ OpFunctionEnd
diff --git a/test/ptr_ref/load/global/struct_field.spvasm.expected.wgsl b/test/ptr_ref/load/global/struct_field.spvasm.expected.wgsl
index e3f4540..c423f77 100644
--- a/test/ptr_ref/load/global/struct_field.spvasm.expected.wgsl
+++ b/test/ptr_ref/load/global/struct_field.spvasm.expected.wgsl
@@ -4,10 +4,14 @@
var<private> V : S;
-[[stage(compute)]]
-fn main() {
+fn main_1() {
var i : i32;
let x_15 : i32 = V.i;
i = x_15;
return;
}
+
+[[stage(compute)]]
+fn main() {
+ main_1();
+}
diff --git a/test/ptr_ref/load/local/i32.spvasm.expected.hlsl b/test/ptr_ref/load/local/i32.spvasm.expected.hlsl
index fc4a24b..e93814c 100644
--- a/test/ptr_ref/load/local/i32.spvasm.expected.hlsl
+++ b/test/ptr_ref/load/local/i32.spvasm.expected.hlsl
@@ -1,8 +1,13 @@
-[numthreads(1, 1, 1)]
-void main() {
+void main_1() {
int i = 0;
i = 123;
const int x_10 = i;
const int x_12 = (x_10 + 1);
return;
}
+
+[numthreads(1, 1, 1)]
+void main() {
+ main_1();
+ return;
+}
diff --git a/test/ptr_ref/load/local/i32.spvasm.expected.msl b/test/ptr_ref/load/local/i32.spvasm.expected.msl
index 738dfea..bfbd8e5 100644
--- a/test/ptr_ref/load/local/i32.spvasm.expected.msl
+++ b/test/ptr_ref/load/local/i32.spvasm.expected.msl
@@ -1,7 +1,7 @@
#include <metal_stdlib>
using namespace metal;
-kernel void tint_symbol() {
+void main_1() {
int i = 0;
i = 123;
int const x_10 = i;
@@ -9,3 +9,8 @@
return;
}
+kernel void tint_symbol() {
+ main_1();
+ return;
+}
+
diff --git a/test/ptr_ref/load/local/i32.spvasm.expected.spvasm b/test/ptr_ref/load/local/i32.spvasm.expected.spvasm
index bc6f467..f5dfd09 100644
--- a/test/ptr_ref/load/local/i32.spvasm.expected.spvasm
+++ b/test/ptr_ref/load/local/i32.spvasm.expected.spvasm
@@ -1,14 +1,15 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 14
+; Bound: 17
; Schema: 0
OpCapability Shader
OpMemoryModel Logical GLSL450
OpEntryPoint GLCompute %main "main"
OpExecutionMode %main LocalSize 1 1 1
- OpName %main "main"
+ OpName %main_1 "main_1"
OpName %i "i"
+ OpName %main "main"
%void = OpTypeVoid
%1 = OpTypeFunction %void
%int = OpTypeInt 32 1
@@ -17,7 +18,7 @@
%9 = OpConstantNull %int
%int_123 = OpConstant %int 123
%int_1 = OpConstant %int 1
- %main = OpFunction %void None %1
+ %main_1 = OpFunction %void None %1
%4 = OpLabel
%i = OpVariable %_ptr_Function_int Function %9
OpStore %i %int_0
@@ -26,3 +27,8 @@
%13 = OpIAdd %int %11 %int_1
OpReturn
OpFunctionEnd
+ %main = OpFunction %void None %1
+ %15 = OpLabel
+ %16 = OpFunctionCall %void %main_1
+ OpReturn
+ OpFunctionEnd
diff --git a/test/ptr_ref/load/local/i32.spvasm.expected.wgsl b/test/ptr_ref/load/local/i32.spvasm.expected.wgsl
index 60551cd..8a47e29 100644
--- a/test/ptr_ref/load/local/i32.spvasm.expected.wgsl
+++ b/test/ptr_ref/load/local/i32.spvasm.expected.wgsl
@@ -1,8 +1,12 @@
-[[stage(compute)]]
-fn main() {
+fn main_1() {
var i : i32 = 0;
i = 123;
let x_10 : i32 = i;
let x_12 : i32 = (x_10 + 1);
return;
}
+
+[[stage(compute)]]
+fn main() {
+ main_1();
+}
diff --git a/test/ptr_ref/load/local/struct_field.spvasm.expected.hlsl b/test/ptr_ref/load/local/struct_field.spvasm.expected.hlsl
index 0f93795..33da9c4 100644
--- a/test/ptr_ref/load/local/struct_field.spvasm.expected.hlsl
+++ b/test/ptr_ref/load/local/struct_field.spvasm.expected.hlsl
@@ -2,11 +2,16 @@
int i;
};
-[numthreads(1, 1, 1)]
-void main() {
+void main_1() {
int i = 0;
S V = {0};
const int x_14 = V.i;
i = x_14;
return;
}
+
+[numthreads(1, 1, 1)]
+void main() {
+ main_1();
+ return;
+}
diff --git a/test/ptr_ref/load/local/struct_field.spvasm.expected.msl b/test/ptr_ref/load/local/struct_field.spvasm.expected.msl
index 185bd72..686dc6e 100644
--- a/test/ptr_ref/load/local/struct_field.spvasm.expected.msl
+++ b/test/ptr_ref/load/local/struct_field.spvasm.expected.msl
@@ -5,7 +5,7 @@
int i;
};
-kernel void tint_symbol() {
+void main_1() {
int i = 0;
S V = {};
int const x_14 = V.i;
@@ -13,3 +13,8 @@
return;
}
+kernel void tint_symbol() {
+ main_1();
+ return;
+}
+
diff --git a/test/ptr_ref/load/local/struct_field.spvasm.expected.spvasm b/test/ptr_ref/load/local/struct_field.spvasm.expected.spvasm
index 814dd1b..14bc4f7 100644
--- a/test/ptr_ref/load/local/struct_field.spvasm.expected.spvasm
+++ b/test/ptr_ref/load/local/struct_field.spvasm.expected.spvasm
@@ -1,17 +1,18 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 17
+; Bound: 20
; Schema: 0
OpCapability Shader
OpMemoryModel Logical GLSL450
OpEntryPoint GLCompute %main "main"
OpExecutionMode %main LocalSize 1 1 1
- OpName %main "main"
+ OpName %main_1 "main_1"
OpName %i "i"
OpName %S "S"
OpMemberName %S 0 "i"
OpName %V "V"
+ OpName %main "main"
OpMemberDecorate %S 0 Offset 0
%void = OpTypeVoid
%1 = OpTypeFunction %void
@@ -23,7 +24,7 @@
%12 = OpConstantNull %S
%uint = OpTypeInt 32 0
%uint_0 = OpConstant %uint 0
- %main = OpFunction %void None %1
+ %main_1 = OpFunction %void None %1
%4 = OpLabel
%i = OpVariable %_ptr_Function_int Function %8
%V = OpVariable %_ptr_Function_S Function %12
@@ -32,3 +33,8 @@
OpStore %i %16
OpReturn
OpFunctionEnd
+ %main = OpFunction %void None %1
+ %18 = OpLabel
+ %19 = OpFunctionCall %void %main_1
+ OpReturn
+ OpFunctionEnd
diff --git a/test/ptr_ref/load/local/struct_field.spvasm.expected.wgsl b/test/ptr_ref/load/local/struct_field.spvasm.expected.wgsl
index ae1c95e..8ddaccf 100644
--- a/test/ptr_ref/load/local/struct_field.spvasm.expected.wgsl
+++ b/test/ptr_ref/load/local/struct_field.spvasm.expected.wgsl
@@ -2,11 +2,15 @@
i : i32;
};
-[[stage(compute)]]
-fn main() {
+fn main_1() {
var i : i32;
var V : S;
let x_14 : i32 = V.i;
i = x_14;
return;
}
+
+[[stage(compute)]]
+fn main() {
+ main_1();
+}
diff --git a/test/ptr_ref/load/param/ptr.spvasm.expected.hlsl b/test/ptr_ref/load/param/ptr.spvasm.expected.hlsl
index 102d13e..abdb81c 100644
--- a/test/ptr_ref/load/param/ptr.spvasm.expected.hlsl
+++ b/test/ptr_ref/load/param/ptr.spvasm.expected.hlsl
@@ -3,11 +3,16 @@
return (value + x_9);
}
-[numthreads(1, 1, 1)]
-void main() {
+void main_1() {
int i = 0;
i = 123;
const int x_19 = i;
const int x_18 = func(x_19, i);
return;
}
+
+[numthreads(1, 1, 1)]
+void main() {
+ main_1();
+ return;
+}
diff --git a/test/ptr_ref/load/param/ptr.spvasm.expected.msl b/test/ptr_ref/load/param/ptr.spvasm.expected.msl
index 1999858..9c1e7cb 100644
--- a/test/ptr_ref/load/param/ptr.spvasm.expected.msl
+++ b/test/ptr_ref/load/param/ptr.spvasm.expected.msl
@@ -6,7 +6,7 @@
return (value + x_9);
}
-kernel void tint_symbol() {
+void main_1() {
int i = 0;
i = 123;
int const x_19 = i;
@@ -14,3 +14,8 @@
return;
}
+kernel void tint_symbol() {
+ main_1();
+ return;
+}
+
diff --git a/test/ptr_ref/load/param/ptr.spvasm.expected.spvasm b/test/ptr_ref/load/param/ptr.spvasm.expected.spvasm
index 967e2a6..c487a58 100644
--- a/test/ptr_ref/load/param/ptr.spvasm.expected.spvasm
+++ b/test/ptr_ref/load/param/ptr.spvasm.expected.spvasm
@@ -1,7 +1,7 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 22
+; Bound: 25
; Schema: 0
OpCapability Shader
OpMemoryModel Logical GLSL450
@@ -10,8 +10,9 @@
OpName %func "func"
OpName %value "value"
OpName %pointer "pointer"
- OpName %main "main"
+ OpName %main_1 "main_1"
OpName %i "i"
+ OpName %main "main"
%int = OpTypeInt 32 1
%_ptr_Function_int = OpTypePointer Function %int
%1 = OpTypeFunction %int %int %_ptr_Function_int
@@ -28,7 +29,7 @@
%10 = OpIAdd %int %value %9
OpReturnValue %10
OpFunctionEnd
- %main = OpFunction %void None %11
+ %main_1 = OpFunction %void None %11
%14 = OpLabel
%i = OpVariable %_ptr_Function_int Function %17
OpStore %i %int_0
@@ -37,3 +38,8 @@
%20 = OpFunctionCall %int %func %19 %i
OpReturn
OpFunctionEnd
+ %main = OpFunction %void None %11
+ %23 = OpLabel
+ %24 = OpFunctionCall %void %main_1
+ OpReturn
+ OpFunctionEnd
diff --git a/test/ptr_ref/load/param/ptr.spvasm.expected.wgsl b/test/ptr_ref/load/param/ptr.spvasm.expected.wgsl
index e74bd4e..97ca0e7 100644
--- a/test/ptr_ref/load/param/ptr.spvasm.expected.wgsl
+++ b/test/ptr_ref/load/param/ptr.spvasm.expected.wgsl
@@ -3,11 +3,15 @@
return (value + x_9);
}
-[[stage(compute)]]
-fn main() {
+fn main_1() {
var i : i32 = 0;
i = 123;
let x_19 : i32 = i;
let x_18 : i32 = func(x_19, &(i));
return;
}
+
+[[stage(compute)]]
+fn main() {
+ main_1();
+}
diff --git a/test/ptr_ref/store/global/i32.spvasm.expected.hlsl b/test/ptr_ref/store/global/i32.spvasm.expected.hlsl
index cb1bb3d..ffe0633 100644
--- a/test/ptr_ref/store/global/i32.spvasm.expected.hlsl
+++ b/test/ptr_ref/store/global/i32.spvasm.expected.hlsl
@@ -1,8 +1,13 @@
static int I = 0;
-[numthreads(1, 1, 1)]
-void main() {
+void main_1() {
I = 123;
I = ((100 + 20) + 3);
return;
}
+
+[numthreads(1, 1, 1)]
+void main() {
+ main_1();
+ return;
+}
diff --git a/test/ptr_ref/store/global/i32.spvasm.expected.msl b/test/ptr_ref/store/global/i32.spvasm.expected.msl
index 7eaf2d6..6451fe4 100644
--- a/test/ptr_ref/store/global/i32.spvasm.expected.msl
+++ b/test/ptr_ref/store/global/i32.spvasm.expected.msl
@@ -1,10 +1,15 @@
#include <metal_stdlib>
using namespace metal;
+void main_1(thread int* const tint_symbol_1) {
+ *(tint_symbol_1) = 123;
+ *(tint_symbol_1) = ((100 + 20) + 3);
+ return;
+}
+
kernel void tint_symbol() {
- thread int tint_symbol_1 = 0;
- tint_symbol_1 = 123;
- tint_symbol_1 = ((100 + 20) + 3);
+ thread int tint_symbol_2 = 0;
+ main_1(&(tint_symbol_2));
return;
}
diff --git a/test/ptr_ref/store/global/i32.spvasm.expected.spvasm b/test/ptr_ref/store/global/i32.spvasm.expected.spvasm
index 786fc8a..dc2e271 100644
--- a/test/ptr_ref/store/global/i32.spvasm.expected.spvasm
+++ b/test/ptr_ref/store/global/i32.spvasm.expected.spvasm
@@ -1,13 +1,14 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 15
+; Bound: 18
; Schema: 0
OpCapability Shader
OpMemoryModel Logical GLSL450
OpEntryPoint GLCompute %main "main"
OpExecutionMode %main LocalSize 1 1 1
OpName %I "I"
+ OpName %main_1 "main_1"
OpName %main "main"
%int = OpTypeInt 32 1
%int_0 = OpConstant %int 0
@@ -19,7 +20,7 @@
%int_100 = OpConstant %int 100
%int_20 = OpConstant %int 20
%int_3 = OpConstant %int 3
- %main = OpFunction %void None %5
+ %main_1 = OpFunction %void None %5
%8 = OpLabel
OpStore %I %int_123
%12 = OpIAdd %int %int_100 %int_20
@@ -27,3 +28,8 @@
OpStore %I %14
OpReturn
OpFunctionEnd
+ %main = OpFunction %void None %5
+ %16 = OpLabel
+ %17 = OpFunctionCall %void %main_1
+ OpReturn
+ OpFunctionEnd
diff --git a/test/ptr_ref/store/global/i32.spvasm.expected.wgsl b/test/ptr_ref/store/global/i32.spvasm.expected.wgsl
index 9d7722f..ffd907a 100644
--- a/test/ptr_ref/store/global/i32.spvasm.expected.wgsl
+++ b/test/ptr_ref/store/global/i32.spvasm.expected.wgsl
@@ -1,8 +1,12 @@
var<private> I : i32 = 0;
-[[stage(compute)]]
-fn main() {
+fn main_1() {
I = 123;
I = ((100 + 20) + 3);
return;
}
+
+[[stage(compute)]]
+fn main() {
+ main_1();
+}
diff --git a/test/ptr_ref/store/global/struct_field.spvasm.expected.hlsl b/test/ptr_ref/store/global/struct_field.spvasm.expected.hlsl
index 0d55494..0ce7881 100644
--- a/test/ptr_ref/store/global/struct_field.spvasm.expected.hlsl
+++ b/test/ptr_ref/store/global/struct_field.spvasm.expected.hlsl
@@ -4,8 +4,13 @@
static S V;
+void main_1() {
+ V.i = 5;
+ return;
+}
+
[numthreads(1, 1, 1)]
void main() {
- V.i = 5;
+ main_1();
return;
}
diff --git a/test/ptr_ref/store/global/struct_field.spvasm.expected.msl b/test/ptr_ref/store/global/struct_field.spvasm.expected.msl
index 243f1d6..451a322 100644
--- a/test/ptr_ref/store/global/struct_field.spvasm.expected.msl
+++ b/test/ptr_ref/store/global/struct_field.spvasm.expected.msl
@@ -5,9 +5,14 @@
int i;
};
+void main_1(thread S* const tint_symbol_1) {
+ (*(tint_symbol_1)).i = 5;
+ return;
+}
+
kernel void tint_symbol() {
- thread S tint_symbol_1 = {};
- tint_symbol_1.i = 5;
+ thread S tint_symbol_2 = {};
+ main_1(&(tint_symbol_2));
return;
}
diff --git a/test/ptr_ref/store/global/struct_field.spvasm.expected.spvasm b/test/ptr_ref/store/global/struct_field.spvasm.expected.spvasm
index e63c070..7a712bc 100644
--- a/test/ptr_ref/store/global/struct_field.spvasm.expected.spvasm
+++ b/test/ptr_ref/store/global/struct_field.spvasm.expected.spvasm
@@ -1,7 +1,7 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 15
+; Bound: 18
; Schema: 0
OpCapability Shader
OpMemoryModel Logical GLSL450
@@ -10,6 +10,7 @@
OpName %S "S"
OpMemberName %S 0 "i"
OpName %V "V"
+ OpName %main_1 "main_1"
OpName %main "main"
OpMemberDecorate %S 0 Offset 0
%int = OpTypeInt 32 1
@@ -23,9 +24,14 @@
%uint_0 = OpConstant %uint 0
%_ptr_Private_int = OpTypePointer Private %int
%int_5 = OpConstant %int 5
- %main = OpFunction %void None %6
+ %main_1 = OpFunction %void None %6
%9 = OpLabel
%13 = OpAccessChain %_ptr_Private_int %V %uint_0
OpStore %13 %int_5
OpReturn
OpFunctionEnd
+ %main = OpFunction %void None %6
+ %16 = OpLabel
+ %17 = OpFunctionCall %void %main_1
+ OpReturn
+ OpFunctionEnd
diff --git a/test/ptr_ref/store/global/struct_field.spvasm.expected.wgsl b/test/ptr_ref/store/global/struct_field.spvasm.expected.wgsl
index 50cb6f4..7362392 100644
--- a/test/ptr_ref/store/global/struct_field.spvasm.expected.wgsl
+++ b/test/ptr_ref/store/global/struct_field.spvasm.expected.wgsl
@@ -4,8 +4,12 @@
var<private> V : S;
-[[stage(compute)]]
-fn main() {
+fn main_1() {
V.i = 5;
return;
}
+
+[[stage(compute)]]
+fn main() {
+ main_1();
+}
diff --git a/test/ptr_ref/store/local/i32.spvasm.expected.hlsl b/test/ptr_ref/store/local/i32.spvasm.expected.hlsl
index d9ec3d2..5a9d251 100644
--- a/test/ptr_ref/store/local/i32.spvasm.expected.hlsl
+++ b/test/ptr_ref/store/local/i32.spvasm.expected.hlsl
@@ -1,8 +1,13 @@
-[numthreads(1, 1, 1)]
-void main() {
+void main_1() {
int i = 0;
i = 123;
i = 123;
i = ((100 + 20) + 3);
return;
}
+
+[numthreads(1, 1, 1)]
+void main() {
+ main_1();
+ return;
+}
diff --git a/test/ptr_ref/store/local/i32.spvasm.expected.msl b/test/ptr_ref/store/local/i32.spvasm.expected.msl
index 21174ae..dd05e5c 100644
--- a/test/ptr_ref/store/local/i32.spvasm.expected.msl
+++ b/test/ptr_ref/store/local/i32.spvasm.expected.msl
@@ -1,7 +1,7 @@
#include <metal_stdlib>
using namespace metal;
-kernel void tint_symbol() {
+void main_1() {
int i = 0;
i = 123;
i = 123;
@@ -9,3 +9,8 @@
return;
}
+kernel void tint_symbol() {
+ main_1();
+ return;
+}
+
diff --git a/test/ptr_ref/store/local/i32.spvasm.expected.spvasm b/test/ptr_ref/store/local/i32.spvasm.expected.spvasm
index 5a05b5e..85a187a 100644
--- a/test/ptr_ref/store/local/i32.spvasm.expected.spvasm
+++ b/test/ptr_ref/store/local/i32.spvasm.expected.spvasm
@@ -1,14 +1,15 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 16
+; Bound: 19
; Schema: 0
OpCapability Shader
OpMemoryModel Logical GLSL450
OpEntryPoint GLCompute %main "main"
OpExecutionMode %main LocalSize 1 1 1
- OpName %main "main"
+ OpName %main_1 "main_1"
OpName %i "i"
+ OpName %main "main"
%void = OpTypeVoid
%1 = OpTypeFunction %void
%int = OpTypeInt 32 1
@@ -19,7 +20,7 @@
%int_100 = OpConstant %int 100
%int_20 = OpConstant %int 20
%int_3 = OpConstant %int 3
- %main = OpFunction %void None %1
+ %main_1 = OpFunction %void None %1
%4 = OpLabel
%i = OpVariable %_ptr_Function_int Function %9
OpStore %i %int_0
@@ -30,3 +31,8 @@
OpStore %i %15
OpReturn
OpFunctionEnd
+ %main = OpFunction %void None %1
+ %17 = OpLabel
+ %18 = OpFunctionCall %void %main_1
+ OpReturn
+ OpFunctionEnd
diff --git a/test/ptr_ref/store/local/i32.spvasm.expected.wgsl b/test/ptr_ref/store/local/i32.spvasm.expected.wgsl
index ebc870a..f1695d1 100644
--- a/test/ptr_ref/store/local/i32.spvasm.expected.wgsl
+++ b/test/ptr_ref/store/local/i32.spvasm.expected.wgsl
@@ -1,8 +1,12 @@
-[[stage(compute)]]
-fn main() {
+fn main_1() {
var i : i32 = 0;
i = 123;
i = 123;
i = ((100 + 20) + 3);
return;
}
+
+[[stage(compute)]]
+fn main() {
+ main_1();
+}
diff --git a/test/ptr_ref/store/local/struct_field.spvasm.expected.hlsl b/test/ptr_ref/store/local/struct_field.spvasm.expected.hlsl
index 9f99f65..f28389b 100644
--- a/test/ptr_ref/store/local/struct_field.spvasm.expected.hlsl
+++ b/test/ptr_ref/store/local/struct_field.spvasm.expected.hlsl
@@ -2,9 +2,14 @@
int i;
};
-[numthreads(1, 1, 1)]
-void main() {
+void main_1() {
S V = {0};
V.i = 5;
return;
}
+
+[numthreads(1, 1, 1)]
+void main() {
+ main_1();
+ return;
+}
diff --git a/test/ptr_ref/store/local/struct_field.spvasm.expected.msl b/test/ptr_ref/store/local/struct_field.spvasm.expected.msl
index 2e6989d..8be5378 100644
--- a/test/ptr_ref/store/local/struct_field.spvasm.expected.msl
+++ b/test/ptr_ref/store/local/struct_field.spvasm.expected.msl
@@ -5,9 +5,14 @@
int i;
};
-kernel void tint_symbol() {
+void main_1() {
S V = {};
V.i = 5;
return;
}
+kernel void tint_symbol() {
+ main_1();
+ return;
+}
+
diff --git a/test/ptr_ref/store/local/struct_field.spvasm.expected.spvasm b/test/ptr_ref/store/local/struct_field.spvasm.expected.spvasm
index 255c691..1724b72 100644
--- a/test/ptr_ref/store/local/struct_field.spvasm.expected.spvasm
+++ b/test/ptr_ref/store/local/struct_field.spvasm.expected.spvasm
@@ -1,16 +1,17 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 15
+; Bound: 18
; Schema: 0
OpCapability Shader
OpMemoryModel Logical GLSL450
OpEntryPoint GLCompute %main "main"
OpExecutionMode %main LocalSize 1 1 1
- OpName %main "main"
+ OpName %main_1 "main_1"
OpName %S "S"
OpMemberName %S 0 "i"
OpName %V "V"
+ OpName %main "main"
OpMemberDecorate %S 0 Offset 0
%void = OpTypeVoid
%1 = OpTypeFunction %void
@@ -22,10 +23,15 @@
%uint_0 = OpConstant %uint 0
%_ptr_Function_int = OpTypePointer Function %int
%int_5 = OpConstant %int 5
- %main = OpFunction %void None %1
+ %main_1 = OpFunction %void None %1
%4 = OpLabel
%V = OpVariable %_ptr_Function_S Function %9
%13 = OpAccessChain %_ptr_Function_int %V %uint_0
OpStore %13 %int_5
OpReturn
OpFunctionEnd
+ %main = OpFunction %void None %1
+ %16 = OpLabel
+ %17 = OpFunctionCall %void %main_1
+ OpReturn
+ OpFunctionEnd
diff --git a/test/ptr_ref/store/local/struct_field.spvasm.expected.wgsl b/test/ptr_ref/store/local/struct_field.spvasm.expected.wgsl
index 77d7681..d9c0e1f 100644
--- a/test/ptr_ref/store/local/struct_field.spvasm.expected.wgsl
+++ b/test/ptr_ref/store/local/struct_field.spvasm.expected.wgsl
@@ -2,9 +2,13 @@
i : i32;
};
-[[stage(compute)]]
-fn main() {
+fn main_1() {
var V : S;
V.i = 5;
return;
}
+
+[[stage(compute)]]
+fn main() {
+ main_1();
+}
diff --git a/test/ptr_ref/store/param/ptr.spvasm.expected.hlsl b/test/ptr_ref/store/param/ptr.spvasm.expected.hlsl
index 7caf2f1..3191118 100644
--- a/test/ptr_ref/store/param/ptr.spvasm.expected.hlsl
+++ b/test/ptr_ref/store/param/ptr.spvasm.expected.hlsl
@@ -3,10 +3,15 @@
return;
}
-[numthreads(1, 1, 1)]
-void main() {
+void main_1() {
int i = 0;
i = 123;
func(123, i);
return;
}
+
+[numthreads(1, 1, 1)]
+void main() {
+ main_1();
+ return;
+}
diff --git a/test/ptr_ref/store/param/ptr.spvasm.expected.msl b/test/ptr_ref/store/param/ptr.spvasm.expected.msl
index 98cc63c..e689f47 100644
--- a/test/ptr_ref/store/param/ptr.spvasm.expected.msl
+++ b/test/ptr_ref/store/param/ptr.spvasm.expected.msl
@@ -6,10 +6,15 @@
return;
}
-kernel void tint_symbol() {
+void main_1() {
int i = 0;
i = 123;
func(123, &(i));
return;
}
+kernel void tint_symbol() {
+ main_1();
+ return;
+}
+
diff --git a/test/ptr_ref/store/param/ptr.spvasm.expected.spvasm b/test/ptr_ref/store/param/ptr.spvasm.expected.spvasm
index 8126ab6..c4a8e19 100644
--- a/test/ptr_ref/store/param/ptr.spvasm.expected.spvasm
+++ b/test/ptr_ref/store/param/ptr.spvasm.expected.spvasm
@@ -1,7 +1,7 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 19
+; Bound: 22
; Schema: 0
OpCapability Shader
OpMemoryModel Logical GLSL450
@@ -10,8 +10,9 @@
OpName %func "func"
OpName %value "value"
OpName %pointer "pointer"
- OpName %main "main"
+ OpName %main_1 "main_1"
OpName %i "i"
+ OpName %main "main"
%void = OpTypeVoid
%int = OpTypeInt 32 1
%_ptr_Function_int = OpTypePointer Function %int
@@ -27,7 +28,7 @@
OpStore %pointer %value
OpReturn
OpFunctionEnd
- %main = OpFunction %void None %10
+ %main_1 = OpFunction %void None %10
%12 = OpLabel
%i = OpVariable %_ptr_Function_int Function %15
OpStore %i %int_0
@@ -35,3 +36,8 @@
%17 = OpFunctionCall %void %func %int_123 %i
OpReturn
OpFunctionEnd
+ %main = OpFunction %void None %10
+ %20 = OpLabel
+ %21 = OpFunctionCall %void %main_1
+ OpReturn
+ OpFunctionEnd
diff --git a/test/ptr_ref/store/param/ptr.spvasm.expected.wgsl b/test/ptr_ref/store/param/ptr.spvasm.expected.wgsl
index b3de2eb..d56ff4c 100644
--- a/test/ptr_ref/store/param/ptr.spvasm.expected.wgsl
+++ b/test/ptr_ref/store/param/ptr.spvasm.expected.wgsl
@@ -3,10 +3,14 @@
return;
}
-[[stage(compute)]]
-fn main() {
+fn main_1() {
var i : i32 = 0;
i = 123;
func(123, &(i));
return;
}
+
+[[stage(compute)]]
+fn main() {
+ main_1();
+}
diff --git a/test/samples/simple_vertex.spvasm.expected.msl b/test/samples/simple_vertex.spvasm.expected.msl
index 58199d4..cbba940 100644
--- a/test/samples/simple_vertex.spvasm.expected.msl
+++ b/test/samples/simple_vertex.spvasm.expected.msl
@@ -1,13 +1,23 @@
#include <metal_stdlib>
using namespace metal;
-struct tint_symbol_out {
+struct main_out {
+ float4 gl_Position;
+};
+struct tint_symbol_1 {
float4 gl_Position [[position]];
};
-vertex tint_symbol_out tint_symbol() {
- tint_symbol_out _tint_out = {};
- _tint_out.gl_Position = float4(0.0f, 0.0f, 0.0f, 0.0f);
- return _tint_out;
+void main_1(thread float4* const tint_symbol_4) {
+ *(tint_symbol_4) = float4(0.0f, 0.0f, 0.0f, 0.0f);
+ return;
+}
+
+vertex tint_symbol_1 tint_symbol() {
+ thread float4 tint_symbol_5 = 0.0f;
+ main_1(&(tint_symbol_5));
+ main_out const tint_symbol_2 = {.gl_Position=tint_symbol_5};
+ tint_symbol_1 const tint_symbol_3 = {.gl_Position=tint_symbol_2.gl_Position};
+ return tint_symbol_3;
}
diff --git a/test/samples/simple_vertex.spvasm.expected.spvasm b/test/samples/simple_vertex.spvasm.expected.spvasm
index 89ff63f..e96f80d 100644
--- a/test/samples/simple_vertex.spvasm.expected.spvasm
+++ b/test/samples/simple_vertex.spvasm.expected.spvasm
@@ -1,32 +1,58 @@
; SPIR-V
; Version: 1.3
; Generator: Google Tint Compiler; 0
-; Bound: 16
+; Bound: 30
; Schema: 0
OpCapability Shader
OpMemoryModel Logical GLSL450
- OpEntryPoint Vertex %main "main" %tint_pointsize %gl_Position
+ OpEntryPoint Vertex %main "main" %tint_pointsize %tint_symbol_1
OpName %tint_pointsize "tint_pointsize"
OpName %gl_Position "gl_Position"
+ OpName %tint_symbol_1 "tint_symbol_1"
+ OpName %main_1 "main_1"
+ OpName %main_out "main_out"
+ OpMemberName %main_out 0 "gl_Position"
+ OpName %tint_symbol_2 "tint_symbol_2"
+ OpName %tint_symbol "tint_symbol"
OpName %main "main"
OpDecorate %tint_pointsize BuiltIn PointSize
- OpDecorate %gl_Position BuiltIn Position
+ OpDecorate %tint_symbol_1 BuiltIn Position
+ OpMemberDecorate %main_out 0 Offset 0
%float = OpTypeFloat 32
%_ptr_Output_float = OpTypePointer Output %float
%4 = OpConstantNull %float
%tint_pointsize = OpVariable %_ptr_Output_float Output %4
%v4float = OpTypeVector %float 4
-%_ptr_Output_v4float = OpTypePointer Output %v4float
+%_ptr_Private_v4float = OpTypePointer Private %v4float
%8 = OpConstantNull %v4float
-%gl_Position = OpVariable %_ptr_Output_v4float Output %8
+%gl_Position = OpVariable %_ptr_Private_v4float Private %8
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+%tint_symbol_1 = OpVariable %_ptr_Output_v4float Output %8
%void = OpTypeVoid
- %9 = OpTypeFunction %void
- %float_1 = OpConstant %float 1
+ %11 = OpTypeFunction %void
%float_0 = OpConstant %float 0
- %15 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
- %main = OpFunction %void None %9
- %12 = OpLabel
+ %16 = OpConstantComposite %v4float %float_0 %float_0 %float_0 %float_0
+ %main_out = OpTypeStruct %v4float
+ %17 = OpTypeFunction %void %main_out
+ %float_1 = OpConstant %float 1
+ %main_1 = OpFunction %void None %11
+ %14 = OpLabel
+ OpStore %gl_Position %16
+ OpReturn
+ OpFunctionEnd
+%tint_symbol_2 = OpFunction %void None %17
+%tint_symbol = OpFunctionParameter %main_out
+ %21 = OpLabel
+ %22 = OpCompositeExtract %v4float %tint_symbol 0
+ OpStore %tint_symbol_1 %22
+ OpReturn
+ OpFunctionEnd
+ %main = OpFunction %void None %11
+ %24 = OpLabel
OpStore %tint_pointsize %float_1
- OpStore %gl_Position %15
+ %26 = OpFunctionCall %void %main_1
+ %28 = OpLoad %v4float %gl_Position
+ %29 = OpCompositeConstruct %main_out %28
+ %27 = OpFunctionCall %void %tint_symbol_2 %29
OpReturn
OpFunctionEnd
diff --git a/test/samples/simple_vertex.spvasm.expected.wgsl b/test/samples/simple_vertex.spvasm.expected.wgsl
index 75c87cd..45b705f 100644
--- a/test/samples/simple_vertex.spvasm.expected.wgsl
+++ b/test/samples/simple_vertex.spvasm.expected.wgsl
@@ -1,7 +1,17 @@
-[[builtin(position)]] var<out> gl_Position : vec4<f32>;
+var<private> gl_Position : vec4<f32>;
-[[stage(vertex)]]
-fn main() {
+fn main_1() {
gl_Position = vec4<f32>(0.0, 0.0, 0.0, 0.0);
return;
}
+
+struct main_out {
+ [[builtin(position)]]
+ gl_Position : vec4<f32>;
+};
+
+[[stage(vertex)]]
+fn main() -> main_out {
+ main_1();
+ return main_out(gl_Position);
+}