msl: Promote local private vars to function scope

If a module-scope private variable is only referenced within a single
function, promote it to a function scope declaration instead of
passing it as a parameter. This reduces the number of a function
parameters that are needed in some cases.

Bug: tint:1509
Change-Id: I8951f6216bc7e4cf5abfda314bea1e9ed3ded560
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/94002
Reviewed-by: Antonio Maiorano <amaiorano@google.com>
Commit-Queue: Dan Sinclair <dsinclair@chromium.org>
Kokoro: Kokoro <noreply+kokoro@google.com>
This commit is contained in:
dan sinclair 2022-06-28 02:06:05 +00:00 committed by Dawn LUCI CQ
parent 1a758d8ceb
commit 6c167a0dc7
38 changed files with 18845 additions and 566 deletions

View File

@ -352,6 +352,9 @@ struct ModuleScopeVarToEntryPointParam::State {
if (var->StorageClass() == ast::StorageClass::kNone) { if (var->StorageClass() == ast::StorageClass::kNone) {
continue; continue;
} }
if (local_private_vars_.count(var)) {
continue;
}
// This is the symbol for the variable that replaces the module-scope var. // This is the symbol for the variable that replaces the module-scope var.
auto new_var_symbol = ctx.dst->Sym(); auto new_var_symbol = ctx.dst->Sym();
@ -362,20 +365,46 @@ struct ModuleScopeVarToEntryPointParam::State {
// Track whether the new variable was wrapped in a struct or not. // Track whether the new variable was wrapped in a struct or not.
bool is_wrapped = false; bool is_wrapped = false;
// Process the variable to redeclare it as a function parameter or local variable. // Check if this is a private variable that is only referenced by this function.
if (is_entry_point) { bool local_private = false;
ProcessVariableInEntryPoint(func_ast, var, new_var_symbol, workgroup_param, if (var->StorageClass() == ast::StorageClass::kPrivate) {
workgroup_parameter_members, is_pointer, local_private = true;
is_wrapped); for (auto* user : var->Users()) {
auto* stmt = user->Stmt();
if (!stmt || stmt->Function() != func_sem) {
local_private = false;
break;
}
}
}
if (local_private) {
// Redeclare the variable at function scope.
auto* disable_validation =
ctx.dst->Disable(ast::DisabledValidation::kIgnoreStorageClass);
auto* constructor = ctx.Clone(var->Declaration()->constructor);
auto* local_var = ctx.dst->Var(new_var_symbol,
CreateASTTypeFor(ctx, var->Type()->UnwrapRef()),
ast::StorageClass::kPrivate, constructor,
ast::AttributeList{disable_validation});
ctx.InsertFront(func_ast->body->statements, ctx.dst->Decl(local_var));
local_private_vars_.insert(var);
} else { } else {
ProcessVariableInUserFunction(func_ast, var, new_var_symbol, is_pointer); // Process the variable to redeclare it as a parameter or local variable.
if (is_entry_point) {
ProcessVariableInEntryPoint(func_ast, var, new_var_symbol, workgroup_param,
workgroup_parameter_members, is_pointer,
is_wrapped);
} else {
ProcessVariableInUserFunction(func_ast, var, new_var_symbol, is_pointer);
}
// Record the replacement symbol.
var_to_newvar[var] = {new_var_symbol, is_pointer, is_wrapped};
} }
// Replace all uses of the module-scope variable. // Replace all uses of the module-scope variable.
ReplaceUsesInFunction(func_ast, var, new_var_symbol, is_pointer, is_wrapped); ReplaceUsesInFunction(func_ast, var, new_var_symbol, is_pointer, is_wrapped);
// Record the replacement symbol.
var_to_newvar[var] = {new_var_symbol, is_pointer, is_wrapped};
} }
if (!workgroup_parameter_members.empty()) { if (!workgroup_parameter_members.empty()) {
@ -404,7 +433,13 @@ struct ModuleScopeVarToEntryPointParam::State {
continue; continue;
} }
auto new_var = var_to_newvar[target_var]; auto it = var_to_newvar.find(target_var);
if (it == var_to_newvar.end()) {
// No replacement was created for this function.
continue;
}
auto new_var = it->second;
bool is_handle = target_var->Type()->UnwrapRef()->is_handle(); bool is_handle = target_var->Type()->UnwrapRef()->is_handle();
const ast::Expression* arg = ctx.dst->Expr(new_var.symbol); const ast::Expression* arg = ctx.dst->Expr(new_var.symbol);
if (new_var.is_wrapped) { if (new_var.is_wrapped) {
@ -435,6 +470,9 @@ struct ModuleScopeVarToEntryPointParam::State {
// The structures that have already been cloned by this transform. // The structures that have already been cloned by this transform.
std::unordered_set<const sem::Struct*> cloned_structs_; std::unordered_set<const sem::Struct*> cloned_structs_;
// Set of a private variables that are local to a single function.
std::unordered_set<const sem::Variable*> local_private_vars_;
// Map from identifier expression to the address-of expression that uses it. // Map from identifier expression to the address-of expression that uses it.
std::unordered_map<const ast::IdentifierExpression*, const ast::UnaryOpExpression*> std::unordered_map<const ast::IdentifierExpression*, const ast::UnaryOpExpression*>
ident_to_address_of_; ident_to_address_of_;

View File

@ -95,9 +95,14 @@ var<workgroup> w : f32;
fn no_uses() { fn no_uses() {
} }
fn zoo() {
p = p * 2.0;
}
fn bar(a : f32, b : f32) { fn bar(a : f32, b : f32) {
p = a; p = a;
w = b; w = b;
zoo();
} }
fn foo(a : f32) { fn foo(a : f32) {
@ -116,22 +121,27 @@ fn main() {
fn no_uses() { fn no_uses() {
} }
fn bar(a : f32, b : f32, @internal(disable_validation__ignore_storage_class) @internal(disable_validation__ignore_invalid_pointer_argument) tint_symbol : ptr<private, f32>, @internal(disable_validation__ignore_storage_class) @internal(disable_validation__ignore_invalid_pointer_argument) tint_symbol_1 : ptr<workgroup, f32>) { fn zoo(@internal(disable_validation__ignore_storage_class) @internal(disable_validation__ignore_invalid_pointer_argument) tint_symbol : ptr<private, f32>) {
*(tint_symbol) = a; *(tint_symbol) = (*(tint_symbol) * 2.0);
*(tint_symbol_1) = b;
} }
fn foo(a : f32, @internal(disable_validation__ignore_storage_class) @internal(disable_validation__ignore_invalid_pointer_argument) tint_symbol_2 : ptr<private, f32>, @internal(disable_validation__ignore_storage_class) @internal(disable_validation__ignore_invalid_pointer_argument) tint_symbol_3 : ptr<workgroup, f32>) { fn bar(a : f32, b : f32, @internal(disable_validation__ignore_storage_class) @internal(disable_validation__ignore_invalid_pointer_argument) tint_symbol_1 : ptr<private, f32>, @internal(disable_validation__ignore_storage_class) @internal(disable_validation__ignore_invalid_pointer_argument) tint_symbol_2 : ptr<workgroup, f32>) {
*(tint_symbol_1) = a;
*(tint_symbol_2) = b;
zoo(tint_symbol_1);
}
fn foo(a : f32, @internal(disable_validation__ignore_storage_class) @internal(disable_validation__ignore_invalid_pointer_argument) tint_symbol_3 : ptr<private, f32>, @internal(disable_validation__ignore_storage_class) @internal(disable_validation__ignore_invalid_pointer_argument) tint_symbol_4 : ptr<workgroup, f32>) {
let b : f32 = 2.0; let b : f32 = 2.0;
bar(a, b, tint_symbol_2, tint_symbol_3); bar(a, b, tint_symbol_3, tint_symbol_4);
no_uses(); no_uses();
} }
@compute @workgroup_size(1) @compute @workgroup_size(1)
fn main() { fn main() {
@internal(disable_validation__ignore_storage_class) var<private> tint_symbol_4 : f32; @internal(disable_validation__ignore_storage_class) var<private> tint_symbol_5 : f32;
@internal(disable_validation__ignore_storage_class) var<workgroup> tint_symbol_5 : f32; @internal(disable_validation__ignore_storage_class) var<workgroup> tint_symbol_6 : f32;
foo(1.0, &(tint_symbol_4), &(tint_symbol_5)); foo(1.0, &(tint_symbol_5), &(tint_symbol_6));
} }
)"; )";
@ -159,6 +169,11 @@ fn no_uses() {
fn bar(a : f32, b : f32) { fn bar(a : f32, b : f32) {
p = a; p = a;
w = b; w = b;
zoo();
}
fn zoo() {
p = p * 2.0;
} }
var<private> p : f32; var<private> p : f32;
@ -168,23 +183,28 @@ var<workgroup> w : f32;
auto* expect = R"( auto* expect = R"(
@compute @workgroup_size(1) @compute @workgroup_size(1)
fn main() { fn main() {
@internal(disable_validation__ignore_storage_class) var<private> tint_symbol_4 : f32; @internal(disable_validation__ignore_storage_class) var<private> tint_symbol_5 : f32;
@internal(disable_validation__ignore_storage_class) var<workgroup> tint_symbol_5 : f32; @internal(disable_validation__ignore_storage_class) var<workgroup> tint_symbol_6 : f32;
foo(1.0, &(tint_symbol_4), &(tint_symbol_5)); foo(1.0, &(tint_symbol_5), &(tint_symbol_6));
} }
fn foo(a : f32, @internal(disable_validation__ignore_storage_class) @internal(disable_validation__ignore_invalid_pointer_argument) tint_symbol_2 : ptr<private, f32>, @internal(disable_validation__ignore_storage_class) @internal(disable_validation__ignore_invalid_pointer_argument) tint_symbol_3 : ptr<workgroup, f32>) { fn foo(a : f32, @internal(disable_validation__ignore_storage_class) @internal(disable_validation__ignore_invalid_pointer_argument) tint_symbol_3 : ptr<private, f32>, @internal(disable_validation__ignore_storage_class) @internal(disable_validation__ignore_invalid_pointer_argument) tint_symbol_4 : ptr<workgroup, f32>) {
let b : f32 = 2.0; let b : f32 = 2.0;
bar(a, b, tint_symbol_2, tint_symbol_3); bar(a, b, tint_symbol_3, tint_symbol_4);
no_uses(); no_uses();
} }
fn no_uses() { fn no_uses() {
} }
fn bar(a : f32, b : f32, @internal(disable_validation__ignore_storage_class) @internal(disable_validation__ignore_invalid_pointer_argument) tint_symbol : ptr<private, f32>, @internal(disable_validation__ignore_storage_class) @internal(disable_validation__ignore_invalid_pointer_argument) tint_symbol_1 : ptr<workgroup, f32>) { fn bar(a : f32, b : f32, @internal(disable_validation__ignore_storage_class) @internal(disable_validation__ignore_invalid_pointer_argument) tint_symbol_1 : ptr<private, f32>, @internal(disable_validation__ignore_storage_class) @internal(disable_validation__ignore_invalid_pointer_argument) tint_symbol_2 : ptr<workgroup, f32>) {
*(tint_symbol) = a; *(tint_symbol_1) = a;
*(tint_symbol_1) = b; *(tint_symbol_2) = b;
zoo(tint_symbol_1);
}
fn zoo(@internal(disable_validation__ignore_storage_class) @internal(disable_validation__ignore_invalid_pointer_argument) tint_symbol : ptr<private, f32>) {
*(tint_symbol) = (*(tint_symbol) * 2.0);
} }
)"; )";
@ -307,9 +327,9 @@ fn main() {
TEST_F(ModuleScopeVarToEntryPointParamTest, FoldAddressOfDeref) { TEST_F(ModuleScopeVarToEntryPointParamTest, FoldAddressOfDeref) {
auto* src = R"( auto* src = R"(
var<private> v : f32; var<workgroup> v : f32;
fn bar(p : ptr<private, f32>) { fn bar(p : ptr<workgroup, f32>) {
(*p) = 0.0; (*p) = 0.0;
} }
@ -324,17 +344,17 @@ fn main() {
)"; )";
auto* expect = R"( auto* expect = R"(
fn bar(p : ptr<private, f32>) { fn bar(p : ptr<workgroup, f32>) {
*(p) = 0.0; *(p) = 0.0;
} }
fn foo(@internal(disable_validation__ignore_storage_class) @internal(disable_validation__ignore_invalid_pointer_argument) tint_symbol : ptr<private, f32>) { fn foo(@internal(disable_validation__ignore_storage_class) @internal(disable_validation__ignore_invalid_pointer_argument) tint_symbol : ptr<workgroup, f32>) {
bar(tint_symbol); bar(tint_symbol);
} }
@compute @workgroup_size(1) @compute @workgroup_size(1)
fn main() { fn main() {
@internal(disable_validation__ignore_storage_class) var<private> tint_symbol_1 : f32; @internal(disable_validation__ignore_storage_class) var<workgroup> tint_symbol_1 : f32;
foo(&(tint_symbol_1)); foo(&(tint_symbol_1));
} }
)"; )";
@ -355,25 +375,25 @@ fn foo() {
bar(&v); bar(&v);
} }
fn bar(p : ptr<private, f32>) { fn bar(p : ptr<workgroup, f32>) {
(*p) = 0.0; (*p) = 0.0;
} }
var<private> v : f32; var<workgroup> v : f32;
)"; )";
auto* expect = R"( auto* expect = R"(
@compute @workgroup_size(1) @compute @workgroup_size(1)
fn main() { fn main() {
@internal(disable_validation__ignore_storage_class) var<private> tint_symbol_1 : f32; @internal(disable_validation__ignore_storage_class) var<workgroup> tint_symbol_1 : f32;
foo(&(tint_symbol_1)); foo(&(tint_symbol_1));
} }
fn foo(@internal(disable_validation__ignore_storage_class) @internal(disable_validation__ignore_invalid_pointer_argument) tint_symbol : ptr<private, f32>) { fn foo(@internal(disable_validation__ignore_storage_class) @internal(disable_validation__ignore_invalid_pointer_argument) tint_symbol : ptr<workgroup, f32>) {
bar(tint_symbol); bar(tint_symbol);
} }
fn bar(p : ptr<private, f32>) { fn bar(p : ptr<workgroup, f32>) {
*(p) = 0.0; *(p) = 0.0;
} }
)"; )";
@ -1152,6 +1172,81 @@ fn main() {
EXPECT_EQ(expect, str(got)); EXPECT_EQ(expect, str(got));
} }
// Test that a private variable that is only referenced by a single user-defined function is
// promoted to a function scope variable, rather than passed as a parameter.
TEST_F(ModuleScopeVarToEntryPointParamTest, PromotePrivateToFunctionScope) {
auto* src = R"(
var<private> p : f32;
fn foo(a : f32) -> f32 {
let x = p;
p = x * a;
return p;
}
@compute @workgroup_size(1)
fn main() {
_ = foo(1.0);
}
)";
auto* expect = R"(
fn foo(a : f32) -> f32 {
@internal(disable_validation__ignore_storage_class) var<private> tint_symbol : f32;
let x = tint_symbol;
tint_symbol = (x * a);
return tint_symbol;
}
@compute @workgroup_size(1)
fn main() {
_ = foo(1.0);
}
)";
auto got = Run<ModuleScopeVarToEntryPointParam>(src);
EXPECT_EQ(expect, str(got));
}
// Test that a private variable that is only referenced by a single user-defined function is
// promoted to a function scope variable, rather than passed as a parameter.
TEST_F(ModuleScopeVarToEntryPointParamTest, PromotePrivateToFunctionScope_OutOfOrder) {
auto* src = R"(
var<private> p : f32;
@compute @workgroup_size(1)
fn main() {
_ = foo(1.0);
}
fn foo(a : f32) -> f32 {
let x = p;
p = x * a;
return p;
}
)";
auto* expect = R"(
@compute @workgroup_size(1)
fn main() {
_ = foo(1.0);
}
fn foo(a : f32) -> f32 {
@internal(disable_validation__ignore_storage_class) var<private> tint_symbol : f32;
let x = tint_symbol;
tint_symbol = (x * a);
return tint_symbol;
}
)";
auto got = Run<ModuleScopeVarToEntryPointParam>(src);
EXPECT_EQ(expect, str(got));
}
TEST_F(ModuleScopeVarToEntryPointParamTest, EmtpyModule) { TEST_F(ModuleScopeVarToEntryPointParamTest, EmtpyModule) {
auto* src = ""; auto* src = "";

View File

@ -28,7 +28,8 @@ S ret_struct_arr() {
return tint_symbol_2; return tint_symbol_2;
} }
void foo(tint_array<int4, 4> src_param, thread tint_array<int4, 4>* const tint_symbol_4, threadgroup tint_array<int4, 4>* const tint_symbol_5, const constant S* const tint_symbol_6, device S* const tint_symbol_7) { void foo(tint_array<int4, 4> src_param, threadgroup tint_array<int4, 4>* const tint_symbol_5, const constant S* const tint_symbol_6, device S* const tint_symbol_7) {
thread tint_array<int4, 4> tint_symbol_4 = {};
tint_array<int4, 4> src_function = {}; tint_array<int4, 4> src_function = {};
tint_array<int4, 4> dst = {}; tint_array<int4, 4> dst = {};
tint_array<int4, 4> const tint_symbol_3 = tint_array<int4, 4>{int4(1), int4(2), int4(3), int4(3)}; tint_array<int4, 4> const tint_symbol_3 = tint_array<int4, 4>{int4(1), int4(2), int4(3), int4(3)};
@ -38,7 +39,7 @@ void foo(tint_array<int4, 4> src_param, thread tint_array<int4, 4>* const tint_s
tint_array<int4, 4> const src_let = tint_array<int4, 4>{}; tint_array<int4, 4> const src_let = tint_array<int4, 4>{};
dst = src_let; dst = src_let;
dst = src_function; dst = src_function;
dst = *(tint_symbol_4); dst = tint_symbol_4;
dst = *(tint_symbol_5); dst = *(tint_symbol_5);
S const tint_symbol = ret_struct_arr(); S const tint_symbol = ret_struct_arr();
dst = tint_symbol.arr; dst = tint_symbol.arr;

View File

@ -28,22 +28,25 @@ S ret_struct_arr() {
return tint_symbol_2; return tint_symbol_2;
} }
void foo(tint_array<int4, 4> src_param, thread tint_array<int4, 4>* const tint_symbol_4, thread tint_array<int4, 4>* const tint_symbol_5, threadgroup tint_array<int4, 4>* const tint_symbol_6, const constant S* const tint_symbol_7, device S* const tint_symbol_8, thread tint_array<tint_array<tint_array<int, 2>, 3>, 4>* const tint_symbol_9) { void foo(tint_array<int4, 4> src_param, threadgroup tint_array<int4, 4>* const tint_symbol_6, const constant S* const tint_symbol_7, device S* const tint_symbol_8) {
thread tint_array<int4, 4> tint_symbol_4 = {};
thread tint_array<int4, 4> tint_symbol_5 = {};
thread tint_array<tint_array<tint_array<int, 2>, 3>, 4> tint_symbol_9 = {};
tint_array<int4, 4> src_function = {}; tint_array<int4, 4> src_function = {};
tint_array<int4, 4> const tint_symbol_3 = tint_array<int4, 4>{int4(1), int4(2), int4(3), int4(3)}; tint_array<int4, 4> const tint_symbol_3 = tint_array<int4, 4>{int4(1), int4(2), int4(3), int4(3)};
*(tint_symbol_4) = tint_symbol_3; tint_symbol_4 = tint_symbol_3;
*(tint_symbol_4) = src_param; tint_symbol_4 = src_param;
*(tint_symbol_4) = ret_arr(); tint_symbol_4 = ret_arr();
tint_array<int4, 4> const src_let = tint_array<int4, 4>{}; tint_array<int4, 4> const src_let = tint_array<int4, 4>{};
*(tint_symbol_4) = src_let; tint_symbol_4 = src_let;
*(tint_symbol_4) = src_function; tint_symbol_4 = src_function;
*(tint_symbol_4) = *(tint_symbol_5); tint_symbol_4 = tint_symbol_5;
*(tint_symbol_4) = *(tint_symbol_6); tint_symbol_4 = *(tint_symbol_6);
S const tint_symbol = ret_struct_arr(); S const tint_symbol = ret_struct_arr();
*(tint_symbol_4) = tint_symbol.arr; tint_symbol_4 = tint_symbol.arr;
*(tint_symbol_4) = (*(tint_symbol_7)).arr; tint_symbol_4 = (*(tint_symbol_7)).arr;
*(tint_symbol_4) = (*(tint_symbol_8)).arr; tint_symbol_4 = (*(tint_symbol_8)).arr;
tint_array<tint_array<tint_array<int, 2>, 3>, 4> src_nested = {}; tint_array<tint_array<tint_array<int, 2>, 3>, 4> src_nested = {};
*(tint_symbol_9) = src_nested; tint_symbol_9 = src_nested;
} }

View File

@ -32,7 +32,8 @@ S ret_struct_arr() {
return tint_symbol_3; return tint_symbol_3;
} }
void foo(tint_array<int4, 4> src_param, device S* const tint_symbol_5, thread tint_array<int4, 4>* const tint_symbol_6, threadgroup tint_array<int4, 4>* const tint_symbol_7, const constant S* const tint_symbol_8, device S* const tint_symbol_9, device S_nested* const tint_symbol_10) { void foo(tint_array<int4, 4> src_param, device S* const tint_symbol_5, threadgroup tint_array<int4, 4>* const tint_symbol_7, const constant S* const tint_symbol_8, device S* const tint_symbol_9, device S_nested* const tint_symbol_10) {
thread tint_array<int4, 4> tint_symbol_6 = {};
tint_array<int4, 4> src_function = {}; tint_array<int4, 4> src_function = {};
tint_array<int4, 4> const tint_symbol_4 = tint_array<int4, 4>{int4(1), int4(2), int4(3), int4(3)}; tint_array<int4, 4> const tint_symbol_4 = tint_array<int4, 4>{int4(1), int4(2), int4(3), int4(3)};
(*(tint_symbol_5)).arr = tint_symbol_4; (*(tint_symbol_5)).arr = tint_symbol_4;
@ -42,7 +43,7 @@ void foo(tint_array<int4, 4> src_param, device S* const tint_symbol_5, thread ti
tint_array<int4, 4> const src_let = tint_array<int4, 4>{}; tint_array<int4, 4> const src_let = tint_array<int4, 4>{};
(*(tint_symbol_5)).arr = src_let; (*(tint_symbol_5)).arr = src_let;
(*(tint_symbol_5)).arr = src_function; (*(tint_symbol_5)).arr = src_function;
(*(tint_symbol_5)).arr = *(tint_symbol_6); (*(tint_symbol_5)).arr = tint_symbol_6;
(*(tint_symbol_5)).arr = *(tint_symbol_7); (*(tint_symbol_5)).arr = *(tint_symbol_7);
S const tint_symbol_1 = ret_struct_arr(); S const tint_symbol_1 = ret_struct_arr();
(*(tint_symbol_5)).arr = tint_symbol_1.arr; (*(tint_symbol_5)).arr = tint_symbol_1.arr;

View File

@ -28,7 +28,8 @@ S ret_struct_arr() {
return tint_symbol_2; return tint_symbol_2;
} }
void foo(tint_array<int4, 4> src_param, threadgroup tint_array<int4, 4>* const tint_symbol_4, thread tint_array<int4, 4>* const tint_symbol_5, threadgroup tint_array<int4, 4>* const tint_symbol_6, const constant S* const tint_symbol_7, device S* const tint_symbol_8, threadgroup tint_array<tint_array<tint_array<int, 2>, 3>, 4>* const tint_symbol_9) { void foo(tint_array<int4, 4> src_param, threadgroup tint_array<int4, 4>* const tint_symbol_4, threadgroup tint_array<int4, 4>* const tint_symbol_6, const constant S* const tint_symbol_7, device S* const tint_symbol_8, threadgroup tint_array<tint_array<tint_array<int, 2>, 3>, 4>* const tint_symbol_9) {
thread tint_array<int4, 4> tint_symbol_5 = {};
tint_array<int4, 4> src_function = {}; tint_array<int4, 4> src_function = {};
tint_array<int4, 4> const tint_symbol_3 = tint_array<int4, 4>{int4(1), int4(2), int4(3), int4(3)}; tint_array<int4, 4> const tint_symbol_3 = tint_array<int4, 4>{int4(1), int4(2), int4(3), int4(3)};
*(tint_symbol_4) = tint_symbol_3; *(tint_symbol_4) = tint_symbol_3;
@ -37,7 +38,7 @@ void foo(tint_array<int4, 4> src_param, threadgroup tint_array<int4, 4>* const t
tint_array<int4, 4> const src_let = tint_array<int4, 4>{}; tint_array<int4, 4> const src_let = tint_array<int4, 4>{};
*(tint_symbol_4) = src_let; *(tint_symbol_4) = src_let;
*(tint_symbol_4) = src_function; *(tint_symbol_4) = src_function;
*(tint_symbol_4) = *(tint_symbol_5); *(tint_symbol_4) = tint_symbol_5;
*(tint_symbol_4) = *(tint_symbol_6); *(tint_symbol_4) = *(tint_symbol_6);
S const tint_symbol = ret_struct_arr(); S const tint_symbol = ret_struct_arr();
*(tint_symbol_4) = tint_symbol.arr; *(tint_symbol_4) = tint_symbol.arr;

View File

@ -1,22 +1,22 @@
#include <metal_stdlib> #include <metal_stdlib>
using namespace metal; using namespace metal;
void foo(thread float2* const tint_symbol_1, thread int3* const tint_symbol_2, thread uint4* const tint_symbol_3, thread bool2* const tint_symbol_4) { void foo() {
thread float2 tint_symbol_1 = 0.0f;
thread int3 tint_symbol_2 = 0;
thread uint4 tint_symbol_3 = 0u;
thread bool2 tint_symbol_4 = false;
for(int i = 0; (i < 2); i = as_type<int>((as_type<uint>(i) + as_type<uint>(1)))) { for(int i = 0; (i < 2); i = as_type<int>((as_type<uint>(i) + as_type<uint>(1)))) {
(*(tint_symbol_1))[i] = 1.0f; tint_symbol_1[i] = 1.0f;
(*(tint_symbol_2))[i] = 1; tint_symbol_2[i] = 1;
(*(tint_symbol_3))[i] = 1u; tint_symbol_3[i] = 1u;
(*(tint_symbol_4))[i] = true; tint_symbol_4[i] = true;
} }
} }
kernel void tint_symbol() { kernel void tint_symbol() {
thread float2 tint_symbol_5 = 0.0f;
thread int3 tint_symbol_6 = 0;
thread uint4 tint_symbol_7 = 0u;
thread bool2 tint_symbol_8 = false;
for(int i = 0; (i < 2); i = as_type<int>((as_type<uint>(i) + as_type<uint>(1)))) { for(int i = 0; (i < 2); i = as_type<int>((as_type<uint>(i) + as_type<uint>(1)))) {
foo(&(tint_symbol_5), &(tint_symbol_6), &(tint_symbol_7), &(tint_symbol_8)); foo();
} }
return; return;
} }

View File

@ -1,21 +1,21 @@
#include <metal_stdlib> #include <metal_stdlib>
using namespace metal; using namespace metal;
void foo(thread float2* const tint_symbol_1, thread int3* const tint_symbol_2, thread uint4* const tint_symbol_3, thread bool2* const tint_symbol_4) { void foo() {
thread float2 tint_symbol_1 = 0.0f;
thread int3 tint_symbol_2 = 0;
thread uint4 tint_symbol_3 = 0u;
thread bool2 tint_symbol_4 = false;
int i = 0; int i = 0;
(*(tint_symbol_1))[i] = 1.0f; tint_symbol_1[i] = 1.0f;
(*(tint_symbol_2))[i] = 1; tint_symbol_2[i] = 1;
(*(tint_symbol_3))[i] = 1u; tint_symbol_3[i] = 1u;
(*(tint_symbol_4))[i] = true; tint_symbol_4[i] = true;
} }
kernel void tint_symbol() { kernel void tint_symbol() {
thread float2 tint_symbol_5 = 0.0f;
thread int3 tint_symbol_6 = 0;
thread uint4 tint_symbol_7 = 0u;
thread bool2 tint_symbol_8 = false;
for(int i = 0; (i < 2); i = as_type<int>((as_type<uint>(i) + as_type<uint>(1)))) { for(int i = 0; (i < 2); i = as_type<int>((as_type<uint>(i) + as_type<uint>(1)))) {
foo(&(tint_symbol_5), &(tint_symbol_6), &(tint_symbol_7), &(tint_symbol_8)); foo();
} }
return; return;
} }

View File

@ -5,13 +5,13 @@ void x(thread float* const p) {
*(p) = 0.0f; *(p) = 0.0f;
} }
void g(thread float* const tint_symbol) { void g() {
x(tint_symbol); thread float tint_symbol = 0.0f;
x(&(tint_symbol));
} }
fragment void f() { fragment void f() {
thread float tint_symbol_1 = 0.0f; g();
g(&(tint_symbol_1));
return; return;
} }

View File

@ -68,22 +68,22 @@ struct tint_symbol_3 {
float4 gl_Position [[position]]; float4 gl_Position [[position]];
}; };
main_out tint_symbol_inner(float3 position_param, float2 uv_param, float3 normal_param, thread float3* const tint_symbol_10, thread float2* const tint_symbol_11, thread float3* const tint_symbol_12, const constant LeftOver* const tint_symbol_13, thread float4* const tint_symbol_14, thread float2* const tint_symbol_15) { main_out tint_symbol_inner(float3 position_param, float2 uv_param, float3 normal_param, thread float3* const tint_symbol_10, thread float2* const tint_symbol_11, const constant LeftOver* const tint_symbol_13, thread float4* const tint_symbol_14, thread float2* const tint_symbol_15) {
thread float3 tint_symbol_12 = 0.0f;
*(tint_symbol_10) = position_param; *(tint_symbol_10) = position_param;
*(tint_symbol_11) = uv_param; *(tint_symbol_11) = uv_param;
*(tint_symbol_12) = normal_param; tint_symbol_12 = normal_param;
main_1(tint_symbol_10, tint_symbol_13, tint_symbol_14, tint_symbol_11, tint_symbol_15); main_1(tint_symbol_10, tint_symbol_13, tint_symbol_14, tint_symbol_11, tint_symbol_15);
main_out const tint_symbol_4 = {.gl_Position=*(tint_symbol_14), .vUV_1=*(tint_symbol_15)}; main_out const tint_symbol_4 = {.gl_Position=*(tint_symbol_14), .vUV_1=*(tint_symbol_15)};
return tint_symbol_4; return tint_symbol_4;
} }
vertex tint_symbol_3 tint_symbol(const constant LeftOver* tint_symbol_19 [[buffer(0)]], tint_symbol_2 tint_symbol_1 [[stage_in]]) { vertex tint_symbol_3 tint_symbol(const constant LeftOver* tint_symbol_18 [[buffer(0)]], tint_symbol_2 tint_symbol_1 [[stage_in]]) {
thread float3 tint_symbol_16 = 0.0f; thread float3 tint_symbol_16 = 0.0f;
thread float2 tint_symbol_17 = 0.0f; thread float2 tint_symbol_17 = 0.0f;
thread float3 tint_symbol_18 = 0.0f; thread float4 tint_symbol_19 = 0.0f;
thread float4 tint_symbol_20 = 0.0f; thread float2 tint_symbol_20 = 0.0f;
thread float2 tint_symbol_21 = 0.0f; main_out const inner_result = tint_symbol_inner(tint_symbol_1.position_param, tint_symbol_1.uv_param, tint_symbol_1.normal_param, &(tint_symbol_16), &(tint_symbol_17), tint_symbol_18, &(tint_symbol_19), &(tint_symbol_20));
main_out const inner_result = tint_symbol_inner(tint_symbol_1.position_param, tint_symbol_1.uv_param, tint_symbol_1.normal_param, &(tint_symbol_16), &(tint_symbol_17), &(tint_symbol_18), tint_symbol_19, &(tint_symbol_20), &(tint_symbol_21));
tint_symbol_3 wrapper_result = {}; tint_symbol_3 wrapper_result = {};
wrapper_result.gl_Position = inner_result.gl_Position; wrapper_result.gl_Position = inner_result.gl_Position;
wrapper_result.vUV_1 = inner_result.vUV_1; wrapper_result.vUV_1 = inner_result.vUV_1;

3009
test/tint/bug/tint/1509.wgsl Normal file

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -169,19 +169,19 @@ struct tint_symbol_3 {
float4 sk_FragColor_1 [[color(0)]]; float4 sk_FragColor_1 [[color(0)]];
}; };
main_out tint_symbol_inner(bool sk_Clockwise_param, float4 vcolor_S0_param, thread bool* const tint_symbol_9, thread float4* const tint_symbol_10, const constant UniformBuffer* const tint_symbol_11, thread float4* const tint_symbol_12) { main_out tint_symbol_inner(bool sk_Clockwise_param, float4 vcolor_S0_param, thread float4* const tint_symbol_10, const constant UniformBuffer* const tint_symbol_11, thread float4* const tint_symbol_12) {
*(tint_symbol_9) = sk_Clockwise_param; thread bool tint_symbol_9 = false;
tint_symbol_9 = sk_Clockwise_param;
*(tint_symbol_10) = vcolor_S0_param; *(tint_symbol_10) = vcolor_S0_param;
main_1(tint_symbol_10, tint_symbol_11, tint_symbol_12); main_1(tint_symbol_10, tint_symbol_11, tint_symbol_12);
main_out const tint_symbol_4 = {.sk_FragColor_1=*(tint_symbol_12)}; main_out const tint_symbol_4 = {.sk_FragColor_1=*(tint_symbol_12)};
return tint_symbol_4; return tint_symbol_4;
} }
fragment tint_symbol_3 tint_symbol(const constant UniformBuffer* tint_symbol_15 [[buffer(0)]], bool sk_Clockwise_param [[front_facing]], tint_symbol_2 tint_symbol_1 [[stage_in]]) { fragment tint_symbol_3 tint_symbol(const constant UniformBuffer* tint_symbol_14 [[buffer(0)]], bool sk_Clockwise_param [[front_facing]], tint_symbol_2 tint_symbol_1 [[stage_in]]) {
thread bool tint_symbol_13 = false; thread float4 tint_symbol_13 = 0.0f;
thread float4 tint_symbol_14 = 0.0f; thread float4 tint_symbol_15 = 0.0f;
thread float4 tint_symbol_16 = 0.0f; main_out const inner_result = tint_symbol_inner(sk_Clockwise_param, tint_symbol_1.vcolor_S0_param, &(tint_symbol_13), tint_symbol_14, &(tint_symbol_15));
main_out const inner_result = tint_symbol_inner(sk_Clockwise_param, tint_symbol_1.vcolor_S0_param, &(tint_symbol_13), &(tint_symbol_14), tint_symbol_15, &(tint_symbol_16));
tint_symbol_3 wrapper_result = {}; tint_symbol_3 wrapper_result = {};
wrapper_result.sk_FragColor_1 = inner_result.sk_FragColor_1; wrapper_result.sk_FragColor_1 = inner_result.sk_FragColor_1;
return wrapper_result; return wrapper_result;

View File

@ -5,13 +5,13 @@ struct DrawIndirectArgs {
/* 0x0000 */ atomic_uint vertexCount; /* 0x0000 */ atomic_uint vertexCount;
}; };
void computeMain_inner(uint3 global_id, device DrawIndirectArgs* const tint_symbol, thread uint* const tint_symbol_1) { void computeMain_inner(uint3 global_id, device DrawIndirectArgs* const tint_symbol) {
uint const firstVertex = atomic_fetch_add_explicit(&((*(tint_symbol)).vertexCount), *(tint_symbol_1), memory_order_relaxed); thread uint tint_symbol_1 = 0u;
uint const firstVertex = atomic_fetch_add_explicit(&((*(tint_symbol)).vertexCount), tint_symbol_1, memory_order_relaxed);
} }
kernel void computeMain(device DrawIndirectArgs* tint_symbol_2 [[buffer(0)]], uint3 global_id [[thread_position_in_grid]]) { kernel void computeMain(device DrawIndirectArgs* tint_symbol_2 [[buffer(0)]], uint3 global_id [[thread_position_in_grid]]) {
thread uint tint_symbol_3 = 0u; computeMain_inner(global_id, tint_symbol_2);
computeMain_inner(global_id, tint_symbol_2, &(tint_symbol_3));
return; return;
} }

View File

@ -64,7 +64,8 @@ float4x4 getFrameData_f1_(thread float* const frameID, const constant LeftOver*
return float4x4(float4(x_40[0], x_40[1], x_40[2], x_40[3]), float4(x_47[0], x_47[1], x_47[2], x_47[3]), float4(x_54[0], x_54[1], x_54[2], x_54[3]), float4(float4(0.0f)[0], float4(0.0f)[1], float4(0.0f)[2], float4(0.0f)[3])); return float4x4(float4(x_40[0], x_40[1], x_40[2], x_40[3]), float4(x_47[0], x_47[1], x_47[2], x_47[3]), float4(x_54[0], x_54[1], x_54[2], x_54[3]), float4(float4(0.0f)[0], float4(0.0f)[1], float4(0.0f)[2], float4(0.0f)[3]));
} }
void main_1(thread float2* const tint_symbol_8, const constant LeftOver* const tint_symbol_9, texture2d<float, access::sample> tint_symbol_10, sampler tint_symbol_11, texture2d<float, access::sample> tint_symbol_12, texture2d<float, access::sample> tint_symbol_13, sampler tint_symbol_14, thread float* const tint_symbol_15, texture2d<float, access::sample> tint_symbol_16, sampler tint_symbol_17, texture2d<float, access::sample> tint_symbol_18, sampler tint_symbol_19, thread float4* const tint_symbol_20) { void main_1(thread float2* const tint_symbol_8, const constant LeftOver* const tint_symbol_9, texture2d<float, access::sample> tint_symbol_10, sampler tint_symbol_11, texture2d<float, access::sample> tint_symbol_12, texture2d<float, access::sample> tint_symbol_13, sampler tint_symbol_14, texture2d<float, access::sample> tint_symbol_16, sampler tint_symbol_17, texture2d<float, access::sample> tint_symbol_18, sampler tint_symbol_19, thread float4* const tint_symbol_20) {
thread float tint_symbol_15 = 0.0f;
float4 color = 0.0f; float4 color = 0.0f;
float2 tileUV = 0.0f; float2 tileUV = 0.0f;
float2 tileID = 0.0f; float2 tileID = 0.0f;
@ -131,7 +132,7 @@ void main_1(thread float2* const tint_symbol_8, const constant LeftOver* const t
if ((x_174 > 0.0f)) { if ((x_174 > 0.0f)) {
float const x_181 = (*(tint_symbol_9)).time; float const x_181 = (*(tint_symbol_9)).time;
float const x_184 = animationData[2]; float const x_184 = animationData[2];
*(tint_symbol_15) = fmod((x_181 * x_184), 1.0f); tint_symbol_15 = fmod((x_181 * x_184), 1.0f);
f = 0.0f; f = 0.0f;
while (true) { while (true) {
float const x_193 = f; float const x_193 = f;
@ -140,7 +141,7 @@ void main_1(thread float2* const tint_symbol_8, const constant LeftOver* const t
break; break;
} }
float const x_197 = animationData[1]; float const x_197 = animationData[1];
float const x_198 = *(tint_symbol_15); float const x_198 = tint_symbol_15;
if ((x_197 > x_198)) { if ((x_197 > x_198)) {
float const x_203 = animationData[0]; float const x_203 = animationData[0];
frameID_1 = x_203; frameID_1 = x_203;
@ -231,28 +232,27 @@ struct tint_symbol_3 {
float4 glFragColor_1 [[color(0)]]; float4 glFragColor_1 [[color(0)]];
}; };
main_out tint_symbol_inner(float2 tUV_param, float2 tileID_1_param, float2 levelUnits_param, float2 stageUnits_1_param, float3 vPosition_param, float2 vUV_param, thread float2* const tint_symbol_21, thread float2* const tint_symbol_22, thread float2* const tint_symbol_23, thread float2* const tint_symbol_24, thread float3* const tint_symbol_25, thread float2* const tint_symbol_26, const constant LeftOver* const tint_symbol_27, texture2d<float, access::sample> tint_symbol_28, sampler tint_symbol_29, texture2d<float, access::sample> tint_symbol_30, texture2d<float, access::sample> tint_symbol_31, sampler tint_symbol_32, thread float* const tint_symbol_33, texture2d<float, access::sample> tint_symbol_34, sampler tint_symbol_35, texture2d<float, access::sample> tint_symbol_36, sampler tint_symbol_37, thread float4* const tint_symbol_38) { main_out tint_symbol_inner(float2 tUV_param, float2 tileID_1_param, float2 levelUnits_param, float2 stageUnits_1_param, float3 vPosition_param, float2 vUV_param, thread float2* const tint_symbol_21, const constant LeftOver* const tint_symbol_27, texture2d<float, access::sample> tint_symbol_28, sampler tint_symbol_29, texture2d<float, access::sample> tint_symbol_30, texture2d<float, access::sample> tint_symbol_31, sampler tint_symbol_32, texture2d<float, access::sample> tint_symbol_33, sampler tint_symbol_34, texture2d<float, access::sample> tint_symbol_35, sampler tint_symbol_36, thread float4* const tint_symbol_37) {
thread float2 tint_symbol_22 = 0.0f;
thread float2 tint_symbol_23 = 0.0f;
thread float2 tint_symbol_24 = 0.0f;
thread float3 tint_symbol_25 = 0.0f;
thread float2 tint_symbol_26 = 0.0f;
*(tint_symbol_21) = tUV_param; *(tint_symbol_21) = tUV_param;
*(tint_symbol_22) = tileID_1_param; tint_symbol_22 = tileID_1_param;
*(tint_symbol_23) = levelUnits_param; tint_symbol_23 = levelUnits_param;
*(tint_symbol_24) = stageUnits_1_param; tint_symbol_24 = stageUnits_1_param;
*(tint_symbol_25) = vPosition_param; tint_symbol_25 = vPosition_param;
*(tint_symbol_26) = vUV_param; tint_symbol_26 = vUV_param;
main_1(tint_symbol_21, tint_symbol_27, tint_symbol_28, tint_symbol_29, tint_symbol_30, tint_symbol_31, tint_symbol_32, tint_symbol_33, tint_symbol_34, tint_symbol_35, tint_symbol_36, tint_symbol_37, tint_symbol_38); main_1(tint_symbol_21, tint_symbol_27, tint_symbol_28, tint_symbol_29, tint_symbol_30, tint_symbol_31, tint_symbol_32, tint_symbol_33, tint_symbol_34, tint_symbol_35, tint_symbol_36, tint_symbol_37);
main_out const tint_symbol_4 = {.glFragColor_1=*(tint_symbol_38)}; main_out const tint_symbol_4 = {.glFragColor_1=*(tint_symbol_37)};
return tint_symbol_4; return tint_symbol_4;
} }
fragment tint_symbol_3 tint_symbol(const constant LeftOver* tint_symbol_45 [[buffer(0)]], texture2d<float, access::sample> tint_symbol_46 [[texture(0)]], sampler tint_symbol_47 [[sampler(0)]], texture2d<float, access::sample> tint_symbol_48 [[texture(1)]], texture2d<float, access::sample> tint_symbol_49 [[texture(2)]], sampler tint_symbol_50 [[sampler(1)]], texture2d<float, access::sample> tint_symbol_52 [[texture(3)]], sampler tint_symbol_53 [[sampler(2)]], texture2d<float, access::sample> tint_symbol_54 [[texture(4)]], sampler tint_symbol_55 [[sampler(3)]], tint_symbol_2 tint_symbol_1 [[stage_in]]) { fragment tint_symbol_3 tint_symbol(const constant LeftOver* tint_symbol_39 [[buffer(0)]], texture2d<float, access::sample> tint_symbol_40 [[texture(0)]], sampler tint_symbol_41 [[sampler(0)]], texture2d<float, access::sample> tint_symbol_42 [[texture(1)]], texture2d<float, access::sample> tint_symbol_43 [[texture(2)]], sampler tint_symbol_44 [[sampler(1)]], texture2d<float, access::sample> tint_symbol_45 [[texture(3)]], sampler tint_symbol_46 [[sampler(2)]], texture2d<float, access::sample> tint_symbol_47 [[texture(4)]], sampler tint_symbol_48 [[sampler(3)]], tint_symbol_2 tint_symbol_1 [[stage_in]]) {
thread float2 tint_symbol_39 = 0.0f; thread float2 tint_symbol_38 = 0.0f;
thread float2 tint_symbol_40 = 0.0f; thread float4 tint_symbol_49 = 0.0f;
thread float2 tint_symbol_41 = 0.0f; main_out const inner_result = tint_symbol_inner(tint_symbol_1.tUV_param, tint_symbol_1.tileID_1_param, tint_symbol_1.levelUnits_param, tint_symbol_1.stageUnits_1_param, tint_symbol_1.vPosition_param, tint_symbol_1.vUV_param, &(tint_symbol_38), tint_symbol_39, tint_symbol_40, tint_symbol_41, tint_symbol_42, tint_symbol_43, tint_symbol_44, tint_symbol_45, tint_symbol_46, tint_symbol_47, tint_symbol_48, &(tint_symbol_49));
thread float2 tint_symbol_42 = 0.0f;
thread float3 tint_symbol_43 = 0.0f;
thread float2 tint_symbol_44 = 0.0f;
thread float tint_symbol_51 = 0.0f;
thread float4 tint_symbol_56 = 0.0f;
main_out const inner_result = tint_symbol_inner(tint_symbol_1.tUV_param, tint_symbol_1.tileID_1_param, tint_symbol_1.levelUnits_param, tint_symbol_1.stageUnits_1_param, tint_symbol_1.vPosition_param, tint_symbol_1.vUV_param, &(tint_symbol_39), &(tint_symbol_40), &(tint_symbol_41), &(tint_symbol_42), &(tint_symbol_43), &(tint_symbol_44), tint_symbol_45, tint_symbol_46, tint_symbol_47, tint_symbol_48, tint_symbol_49, tint_symbol_50, &(tint_symbol_51), tint_symbol_52, tint_symbol_53, tint_symbol_54, tint_symbol_55, &(tint_symbol_56));
tint_symbol_3 wrapper_result = {}; tint_symbol_3 wrapper_result = {};
wrapper_result.glFragColor_1 = inner_result.glFragColor_1; wrapper_result.glFragColor_1 = inner_result.glFragColor_1;
return wrapper_result; return wrapper_result;

View File

@ -196,7 +196,9 @@ lightingInfo computeHemisphericLighting_vf3_vf3_vf4_vf3_vf3_vf3_f1_(thread float
return x_245; return x_245;
} }
void main_1(thread float* const tint_symbol_5, thread float3* const tint_symbol_6, thread float2* const tint_symbol_7, texture2d<float, access::sample> tint_symbol_8, sampler tint_symbol_9, const constant LeftOver* const tint_symbol_10, thread float4* const tint_symbol_11, thread bool* const tint_symbol_12, thread float2* const tint_symbol_13, thread float4* const tint_symbol_14, texture2d<float, access::sample> tint_symbol_15, sampler tint_symbol_16, const constant Light0* const tint_symbol_17, thread float4* const tint_symbol_18) { void main_1(thread float2* const tint_symbol_7, texture2d<float, access::sample> tint_symbol_8, sampler tint_symbol_9, const constant LeftOver* const tint_symbol_10, thread float4* const tint_symbol_11, thread bool* const tint_symbol_12, thread float2* const tint_symbol_13, thread float4* const tint_symbol_14, texture2d<float, access::sample> tint_symbol_15, sampler tint_symbol_16, const constant Light0* const tint_symbol_17, thread float4* const tint_symbol_18) {
thread float tint_symbol_5 = 0.0f;
thread float3 tint_symbol_6 = 0.0f;
float4 tempTextureRead = 0.0f; float4 tempTextureRead = 0.0f;
float3 rgb = 0.0f; float3 rgb = 0.0f;
float3 output5 = 0.0f; float3 output5 = 0.0f;
@ -250,8 +252,8 @@ void main_1(thread float* const tint_symbol_5, thread float3* const tint_symbol_
float3 diffuseOutput = 0.0f; float3 diffuseOutput = 0.0f;
float3 specularOutput = 0.0f; float3 specularOutput = 0.0f;
float3 output3 = 0.0f; float3 output3 = 0.0f;
*(tint_symbol_5) = 100.0f; tint_symbol_5 = 100.0f;
*(tint_symbol_6) = float3(0.5f); tint_symbol_6 = float3(0.5f);
float2 const x_261 = *(tint_symbol_7); float2 const x_261 = *(tint_symbol_7);
float4 const x_262 = tint_symbol_8.sample(tint_symbol_9, x_261); float4 const x_262 = tint_symbol_8.sample(tint_symbol_9, x_261);
tempTextureRead = x_262; tempTextureRead = x_262;
@ -394,7 +396,7 @@ void main_1(thread float* const tint_symbol_5, thread float3* const tint_symbol_
float4 const x_482 = *(tint_symbol_11); float4 const x_482 = *(tint_symbol_11);
viewDirectionW_1 = normalize((x_481 - float3(x_482[0], x_482[1], x_482[2]))); viewDirectionW_1 = normalize((x_481 - float3(x_482[0], x_482[1], x_482[2])));
shadow = 1.0f; shadow = 1.0f;
float const x_488 = *(tint_symbol_5); float const x_488 = tint_symbol_5;
glossiness_1 = (1.0f * x_488); glossiness_1 = (1.0f * x_488);
diffuseBase = float3(0.0f); diffuseBase = float3(0.0f);
specularBase = float3(0.0f); specularBase = float3(0.0f);
@ -429,7 +431,7 @@ void main_1(thread float* const tint_symbol_5, thread float3* const tint_symbol_
float3 const x_536 = rgb1; float3 const x_536 = rgb1;
diffuseOutput = (x_535 * x_536); diffuseOutput = (x_535 * x_536);
float3 const x_539 = specularBase; float3 const x_539 = specularBase;
float3 const x_540 = *(tint_symbol_6); float3 const x_540 = tint_symbol_6;
specularOutput = (x_539 * x_540); specularOutput = (x_539 * x_540);
float3 const x_543 = diffuseOutput; float3 const x_543 = diffuseOutput;
float3 const x_544 = specularOutput; float3 const x_544 = specularOutput;
@ -454,27 +456,25 @@ struct tint_symbol_3 {
float4 glFragColor_1 [[color(0)]]; float4 glFragColor_1 [[color(0)]];
}; };
main_out tint_symbol_inner(float2 vMainuv_param, float4 v_output1_param, bool gl_FrontFacing_param, float2 v_uv_param, float4 v_output2_param, thread float2* const tint_symbol_19, thread float4* const tint_symbol_20, thread bool* const tint_symbol_21, thread float2* const tint_symbol_22, thread float4* const tint_symbol_23, thread float* const tint_symbol_24, thread float3* const tint_symbol_25, texture2d<float, access::sample> tint_symbol_26, sampler tint_symbol_27, const constant LeftOver* const tint_symbol_28, texture2d<float, access::sample> tint_symbol_29, sampler tint_symbol_30, const constant Light0* const tint_symbol_31, thread float4* const tint_symbol_32) { main_out tint_symbol_inner(float2 vMainuv_param, float4 v_output1_param, bool gl_FrontFacing_param, float2 v_uv_param, float4 v_output2_param, thread float2* const tint_symbol_19, thread float4* const tint_symbol_20, thread bool* const tint_symbol_21, thread float2* const tint_symbol_22, thread float4* const tint_symbol_23, texture2d<float, access::sample> tint_symbol_24, sampler tint_symbol_25, const constant LeftOver* const tint_symbol_26, texture2d<float, access::sample> tint_symbol_27, sampler tint_symbol_28, const constant Light0* const tint_symbol_29, thread float4* const tint_symbol_30) {
*(tint_symbol_19) = vMainuv_param; *(tint_symbol_19) = vMainuv_param;
*(tint_symbol_20) = v_output1_param; *(tint_symbol_20) = v_output1_param;
*(tint_symbol_21) = gl_FrontFacing_param; *(tint_symbol_21) = gl_FrontFacing_param;
*(tint_symbol_22) = v_uv_param; *(tint_symbol_22) = v_uv_param;
*(tint_symbol_23) = v_output2_param; *(tint_symbol_23) = v_output2_param;
main_1(tint_symbol_24, tint_symbol_25, tint_symbol_19, tint_symbol_26, tint_symbol_27, tint_symbol_28, tint_symbol_20, tint_symbol_21, tint_symbol_22, tint_symbol_23, tint_symbol_29, tint_symbol_30, tint_symbol_31, tint_symbol_32); main_1(tint_symbol_19, tint_symbol_24, tint_symbol_25, tint_symbol_26, tint_symbol_20, tint_symbol_21, tint_symbol_22, tint_symbol_23, tint_symbol_27, tint_symbol_28, tint_symbol_29, tint_symbol_30);
main_out const tint_symbol_4 = {.glFragColor_1=*(tint_symbol_32)}; main_out const tint_symbol_4 = {.glFragColor_1=*(tint_symbol_30)};
return tint_symbol_4; return tint_symbol_4;
} }
fragment tint_symbol_3 tint_symbol(texture2d<float, access::sample> tint_symbol_40 [[texture(0)]], sampler tint_symbol_41 [[sampler(0)]], const constant LeftOver* tint_symbol_42 [[buffer(0)]], texture2d<float, access::sample> tint_symbol_43 [[texture(1)]], sampler tint_symbol_44 [[sampler(1)]], const constant Light0* tint_symbol_45 [[buffer(1)]], bool gl_FrontFacing_param [[front_facing]], tint_symbol_2 tint_symbol_1 [[stage_in]]) { fragment tint_symbol_3 tint_symbol(texture2d<float, access::sample> tint_symbol_36 [[texture(0)]], sampler tint_symbol_37 [[sampler(0)]], const constant LeftOver* tint_symbol_38 [[buffer(0)]], texture2d<float, access::sample> tint_symbol_39 [[texture(1)]], sampler tint_symbol_40 [[sampler(1)]], const constant Light0* tint_symbol_41 [[buffer(1)]], bool gl_FrontFacing_param [[front_facing]], tint_symbol_2 tint_symbol_1 [[stage_in]]) {
thread float2 tint_symbol_33 = 0.0f; thread float2 tint_symbol_31 = 0.0f;
thread float4 tint_symbol_34 = 0.0f; thread float4 tint_symbol_32 = 0.0f;
thread bool tint_symbol_35 = false; thread bool tint_symbol_33 = false;
thread float2 tint_symbol_36 = 0.0f; thread float2 tint_symbol_34 = 0.0f;
thread float4 tint_symbol_37 = 0.0f; thread float4 tint_symbol_35 = 0.0f;
thread float tint_symbol_38 = 0.0f; thread float4 tint_symbol_42 = 0.0f;
thread float3 tint_symbol_39 = 0.0f; main_out const inner_result = tint_symbol_inner(tint_symbol_1.vMainuv_param, tint_symbol_1.v_output1_param, gl_FrontFacing_param, tint_symbol_1.v_uv_param, tint_symbol_1.v_output2_param, &(tint_symbol_31), &(tint_symbol_32), &(tint_symbol_33), &(tint_symbol_34), &(tint_symbol_35), tint_symbol_36, tint_symbol_37, tint_symbol_38, tint_symbol_39, tint_symbol_40, tint_symbol_41, &(tint_symbol_42));
thread float4 tint_symbol_46 = 0.0f;
main_out const inner_result = tint_symbol_inner(tint_symbol_1.vMainuv_param, tint_symbol_1.v_output1_param, gl_FrontFacing_param, tint_symbol_1.v_uv_param, tint_symbol_1.v_output2_param, &(tint_symbol_33), &(tint_symbol_34), &(tint_symbol_35), &(tint_symbol_36), &(tint_symbol_37), &(tint_symbol_38), &(tint_symbol_39), tint_symbol_40, tint_symbol_41, tint_symbol_42, tint_symbol_43, tint_symbol_44, tint_symbol_45, &(tint_symbol_46));
tint_symbol_3 wrapper_result = {}; tint_symbol_3 wrapper_result = {};
wrapper_result.glFragColor_1 = inner_result.glFragColor_1; wrapper_result.glFragColor_1 = inner_result.glFragColor_1;
return wrapper_result; return wrapper_result;

View File

@ -5,127 +5,128 @@ struct S {
float3 v; float3 v;
}; };
void f(thread S* const tint_symbol) { void f() {
float3 v = (*(tint_symbol)).v; thread S tint_symbol = {};
float x = (*(tint_symbol)).v[0]; float3 v = tint_symbol.v;
float y = (*(tint_symbol)).v[1]; float x = tint_symbol.v[0];
float z = (*(tint_symbol)).v[2]; float y = tint_symbol.v[1];
float2 xx = float3((*(tint_symbol)).v).xx; float z = tint_symbol.v[2];
float2 xy = float3((*(tint_symbol)).v).xy; float2 xx = float3(tint_symbol.v).xx;
float2 xz = float3((*(tint_symbol)).v).xz; float2 xy = float3(tint_symbol.v).xy;
float2 yx = float3((*(tint_symbol)).v).yx; float2 xz = float3(tint_symbol.v).xz;
float2 yy = float3((*(tint_symbol)).v).yy; float2 yx = float3(tint_symbol.v).yx;
float2 yz = float3((*(tint_symbol)).v).yz; float2 yy = float3(tint_symbol.v).yy;
float2 zx = float3((*(tint_symbol)).v).zx; float2 yz = float3(tint_symbol.v).yz;
float2 zy = float3((*(tint_symbol)).v).zy; float2 zx = float3(tint_symbol.v).zx;
float2 zz = float3((*(tint_symbol)).v).zz; float2 zy = float3(tint_symbol.v).zy;
float3 xxx = float3((*(tint_symbol)).v).xxx; float2 zz = float3(tint_symbol.v).zz;
float3 xxy = float3((*(tint_symbol)).v).xxy; float3 xxx = float3(tint_symbol.v).xxx;
float3 xxz = float3((*(tint_symbol)).v).xxz; float3 xxy = float3(tint_symbol.v).xxy;
float3 xyx = float3((*(tint_symbol)).v).xyx; float3 xxz = float3(tint_symbol.v).xxz;
float3 xyy = float3((*(tint_symbol)).v).xyy; float3 xyx = float3(tint_symbol.v).xyx;
float3 xyz = float3((*(tint_symbol)).v).xyz; float3 xyy = float3(tint_symbol.v).xyy;
float3 xzx = float3((*(tint_symbol)).v).xzx; float3 xyz = float3(tint_symbol.v).xyz;
float3 xzy = float3((*(tint_symbol)).v).xzy; float3 xzx = float3(tint_symbol.v).xzx;
float3 xzz = float3((*(tint_symbol)).v).xzz; float3 xzy = float3(tint_symbol.v).xzy;
float3 yxx = float3((*(tint_symbol)).v).yxx; float3 xzz = float3(tint_symbol.v).xzz;
float3 yxy = float3((*(tint_symbol)).v).yxy; float3 yxx = float3(tint_symbol.v).yxx;
float3 yxz = float3((*(tint_symbol)).v).yxz; float3 yxy = float3(tint_symbol.v).yxy;
float3 yyx = float3((*(tint_symbol)).v).yyx; float3 yxz = float3(tint_symbol.v).yxz;
float3 yyy = float3((*(tint_symbol)).v).yyy; float3 yyx = float3(tint_symbol.v).yyx;
float3 yyz = float3((*(tint_symbol)).v).yyz; float3 yyy = float3(tint_symbol.v).yyy;
float3 yzx = float3((*(tint_symbol)).v).yzx; float3 yyz = float3(tint_symbol.v).yyz;
float3 yzy = float3((*(tint_symbol)).v).yzy; float3 yzx = float3(tint_symbol.v).yzx;
float3 yzz = float3((*(tint_symbol)).v).yzz; float3 yzy = float3(tint_symbol.v).yzy;
float3 zxx = float3((*(tint_symbol)).v).zxx; float3 yzz = float3(tint_symbol.v).yzz;
float3 zxy = float3((*(tint_symbol)).v).zxy; float3 zxx = float3(tint_symbol.v).zxx;
float3 zxz = float3((*(tint_symbol)).v).zxz; float3 zxy = float3(tint_symbol.v).zxy;
float3 zyx = float3((*(tint_symbol)).v).zyx; float3 zxz = float3(tint_symbol.v).zxz;
float3 zyy = float3((*(tint_symbol)).v).zyy; float3 zyx = float3(tint_symbol.v).zyx;
float3 zyz = float3((*(tint_symbol)).v).zyz; float3 zyy = float3(tint_symbol.v).zyy;
float3 zzx = float3((*(tint_symbol)).v).zzx; float3 zyz = float3(tint_symbol.v).zyz;
float3 zzy = float3((*(tint_symbol)).v).zzy; float3 zzx = float3(tint_symbol.v).zzx;
float3 zzz = float3((*(tint_symbol)).v).zzz; float3 zzy = float3(tint_symbol.v).zzy;
float4 xxxx = float3((*(tint_symbol)).v).xxxx; float3 zzz = float3(tint_symbol.v).zzz;
float4 xxxy = float3((*(tint_symbol)).v).xxxy; float4 xxxx = float3(tint_symbol.v).xxxx;
float4 xxxz = float3((*(tint_symbol)).v).xxxz; float4 xxxy = float3(tint_symbol.v).xxxy;
float4 xxyx = float3((*(tint_symbol)).v).xxyx; float4 xxxz = float3(tint_symbol.v).xxxz;
float4 xxyy = float3((*(tint_symbol)).v).xxyy; float4 xxyx = float3(tint_symbol.v).xxyx;
float4 xxyz = float3((*(tint_symbol)).v).xxyz; float4 xxyy = float3(tint_symbol.v).xxyy;
float4 xxzx = float3((*(tint_symbol)).v).xxzx; float4 xxyz = float3(tint_symbol.v).xxyz;
float4 xxzy = float3((*(tint_symbol)).v).xxzy; float4 xxzx = float3(tint_symbol.v).xxzx;
float4 xxzz = float3((*(tint_symbol)).v).xxzz; float4 xxzy = float3(tint_symbol.v).xxzy;
float4 xyxx = float3((*(tint_symbol)).v).xyxx; float4 xxzz = float3(tint_symbol.v).xxzz;
float4 xyxy = float3((*(tint_symbol)).v).xyxy; float4 xyxx = float3(tint_symbol.v).xyxx;
float4 xyxz = float3((*(tint_symbol)).v).xyxz; float4 xyxy = float3(tint_symbol.v).xyxy;
float4 xyyx = float3((*(tint_symbol)).v).xyyx; float4 xyxz = float3(tint_symbol.v).xyxz;
float4 xyyy = float3((*(tint_symbol)).v).xyyy; float4 xyyx = float3(tint_symbol.v).xyyx;
float4 xyyz = float3((*(tint_symbol)).v).xyyz; float4 xyyy = float3(tint_symbol.v).xyyy;
float4 xyzx = float3((*(tint_symbol)).v).xyzx; float4 xyyz = float3(tint_symbol.v).xyyz;
float4 xyzy = float3((*(tint_symbol)).v).xyzy; float4 xyzx = float3(tint_symbol.v).xyzx;
float4 xyzz = float3((*(tint_symbol)).v).xyzz; float4 xyzy = float3(tint_symbol.v).xyzy;
float4 xzxx = float3((*(tint_symbol)).v).xzxx; float4 xyzz = float3(tint_symbol.v).xyzz;
float4 xzxy = float3((*(tint_symbol)).v).xzxy; float4 xzxx = float3(tint_symbol.v).xzxx;
float4 xzxz = float3((*(tint_symbol)).v).xzxz; float4 xzxy = float3(tint_symbol.v).xzxy;
float4 xzyx = float3((*(tint_symbol)).v).xzyx; float4 xzxz = float3(tint_symbol.v).xzxz;
float4 xzyy = float3((*(tint_symbol)).v).xzyy; float4 xzyx = float3(tint_symbol.v).xzyx;
float4 xzyz = float3((*(tint_symbol)).v).xzyz; float4 xzyy = float3(tint_symbol.v).xzyy;
float4 xzzx = float3((*(tint_symbol)).v).xzzx; float4 xzyz = float3(tint_symbol.v).xzyz;
float4 xzzy = float3((*(tint_symbol)).v).xzzy; float4 xzzx = float3(tint_symbol.v).xzzx;
float4 xzzz = float3((*(tint_symbol)).v).xzzz; float4 xzzy = float3(tint_symbol.v).xzzy;
float4 yxxx = float3((*(tint_symbol)).v).yxxx; float4 xzzz = float3(tint_symbol.v).xzzz;
float4 yxxy = float3((*(tint_symbol)).v).yxxy; float4 yxxx = float3(tint_symbol.v).yxxx;
float4 yxxz = float3((*(tint_symbol)).v).yxxz; float4 yxxy = float3(tint_symbol.v).yxxy;
float4 yxyx = float3((*(tint_symbol)).v).yxyx; float4 yxxz = float3(tint_symbol.v).yxxz;
float4 yxyy = float3((*(tint_symbol)).v).yxyy; float4 yxyx = float3(tint_symbol.v).yxyx;
float4 yxyz = float3((*(tint_symbol)).v).yxyz; float4 yxyy = float3(tint_symbol.v).yxyy;
float4 yxzx = float3((*(tint_symbol)).v).yxzx; float4 yxyz = float3(tint_symbol.v).yxyz;
float4 yxzy = float3((*(tint_symbol)).v).yxzy; float4 yxzx = float3(tint_symbol.v).yxzx;
float4 yxzz = float3((*(tint_symbol)).v).yxzz; float4 yxzy = float3(tint_symbol.v).yxzy;
float4 yyxx = float3((*(tint_symbol)).v).yyxx; float4 yxzz = float3(tint_symbol.v).yxzz;
float4 yyxy = float3((*(tint_symbol)).v).yyxy; float4 yyxx = float3(tint_symbol.v).yyxx;
float4 yyxz = float3((*(tint_symbol)).v).yyxz; float4 yyxy = float3(tint_symbol.v).yyxy;
float4 yyyx = float3((*(tint_symbol)).v).yyyx; float4 yyxz = float3(tint_symbol.v).yyxz;
float4 yyyy = float3((*(tint_symbol)).v).yyyy; float4 yyyx = float3(tint_symbol.v).yyyx;
float4 yyyz = float3((*(tint_symbol)).v).yyyz; float4 yyyy = float3(tint_symbol.v).yyyy;
float4 yyzx = float3((*(tint_symbol)).v).yyzx; float4 yyyz = float3(tint_symbol.v).yyyz;
float4 yyzy = float3((*(tint_symbol)).v).yyzy; float4 yyzx = float3(tint_symbol.v).yyzx;
float4 yyzz = float3((*(tint_symbol)).v).yyzz; float4 yyzy = float3(tint_symbol.v).yyzy;
float4 yzxx = float3((*(tint_symbol)).v).yzxx; float4 yyzz = float3(tint_symbol.v).yyzz;
float4 yzxy = float3((*(tint_symbol)).v).yzxy; float4 yzxx = float3(tint_symbol.v).yzxx;
float4 yzxz = float3((*(tint_symbol)).v).yzxz; float4 yzxy = float3(tint_symbol.v).yzxy;
float4 yzyx = float3((*(tint_symbol)).v).yzyx; float4 yzxz = float3(tint_symbol.v).yzxz;
float4 yzyy = float3((*(tint_symbol)).v).yzyy; float4 yzyx = float3(tint_symbol.v).yzyx;
float4 yzyz = float3((*(tint_symbol)).v).yzyz; float4 yzyy = float3(tint_symbol.v).yzyy;
float4 yzzx = float3((*(tint_symbol)).v).yzzx; float4 yzyz = float3(tint_symbol.v).yzyz;
float4 yzzy = float3((*(tint_symbol)).v).yzzy; float4 yzzx = float3(tint_symbol.v).yzzx;
float4 yzzz = float3((*(tint_symbol)).v).yzzz; float4 yzzy = float3(tint_symbol.v).yzzy;
float4 zxxx = float3((*(tint_symbol)).v).zxxx; float4 yzzz = float3(tint_symbol.v).yzzz;
float4 zxxy = float3((*(tint_symbol)).v).zxxy; float4 zxxx = float3(tint_symbol.v).zxxx;
float4 zxxz = float3((*(tint_symbol)).v).zxxz; float4 zxxy = float3(tint_symbol.v).zxxy;
float4 zxyx = float3((*(tint_symbol)).v).zxyx; float4 zxxz = float3(tint_symbol.v).zxxz;
float4 zxyy = float3((*(tint_symbol)).v).zxyy; float4 zxyx = float3(tint_symbol.v).zxyx;
float4 zxyz = float3((*(tint_symbol)).v).zxyz; float4 zxyy = float3(tint_symbol.v).zxyy;
float4 zxzx = float3((*(tint_symbol)).v).zxzx; float4 zxyz = float3(tint_symbol.v).zxyz;
float4 zxzy = float3((*(tint_symbol)).v).zxzy; float4 zxzx = float3(tint_symbol.v).zxzx;
float4 zxzz = float3((*(tint_symbol)).v).zxzz; float4 zxzy = float3(tint_symbol.v).zxzy;
float4 zyxx = float3((*(tint_symbol)).v).zyxx; float4 zxzz = float3(tint_symbol.v).zxzz;
float4 zyxy = float3((*(tint_symbol)).v).zyxy; float4 zyxx = float3(tint_symbol.v).zyxx;
float4 zyxz = float3((*(tint_symbol)).v).zyxz; float4 zyxy = float3(tint_symbol.v).zyxy;
float4 zyyx = float3((*(tint_symbol)).v).zyyx; float4 zyxz = float3(tint_symbol.v).zyxz;
float4 zyyy = float3((*(tint_symbol)).v).zyyy; float4 zyyx = float3(tint_symbol.v).zyyx;
float4 zyyz = float3((*(tint_symbol)).v).zyyz; float4 zyyy = float3(tint_symbol.v).zyyy;
float4 zyzx = float3((*(tint_symbol)).v).zyzx; float4 zyyz = float3(tint_symbol.v).zyyz;
float4 zyzy = float3((*(tint_symbol)).v).zyzy; float4 zyzx = float3(tint_symbol.v).zyzx;
float4 zyzz = float3((*(tint_symbol)).v).zyzz; float4 zyzy = float3(tint_symbol.v).zyzy;
float4 zzxx = float3((*(tint_symbol)).v).zzxx; float4 zyzz = float3(tint_symbol.v).zyzz;
float4 zzxy = float3((*(tint_symbol)).v).zzxy; float4 zzxx = float3(tint_symbol.v).zzxx;
float4 zzxz = float3((*(tint_symbol)).v).zzxz; float4 zzxy = float3(tint_symbol.v).zzxy;
float4 zzyx = float3((*(tint_symbol)).v).zzyx; float4 zzxz = float3(tint_symbol.v).zzxz;
float4 zzyy = float3((*(tint_symbol)).v).zzyy; float4 zzyx = float3(tint_symbol.v).zzyx;
float4 zzyz = float3((*(tint_symbol)).v).zzyz; float4 zzyy = float3(tint_symbol.v).zzyy;
float4 zzzx = float3((*(tint_symbol)).v).zzzx; float4 zzyz = float3(tint_symbol.v).zzyz;
float4 zzzy = float3((*(tint_symbol)).v).zzzy; float4 zzzx = float3(tint_symbol.v).zzzx;
float4 zzzz = float3((*(tint_symbol)).v).zzzz; float4 zzzy = float3(tint_symbol.v).zzzy;
float4 zzzz = float3(tint_symbol.v).zzzz;
} }

View File

@ -5,127 +5,128 @@ struct S {
int3 v; int3 v;
}; };
void f(thread S* const tint_symbol) { void f() {
int3 v = (*(tint_symbol)).v; thread S tint_symbol = {};
int x = (*(tint_symbol)).v[0]; int3 v = tint_symbol.v;
int y = (*(tint_symbol)).v[1]; int x = tint_symbol.v[0];
int z = (*(tint_symbol)).v[2]; int y = tint_symbol.v[1];
int2 xx = int3((*(tint_symbol)).v).xx; int z = tint_symbol.v[2];
int2 xy = int3((*(tint_symbol)).v).xy; int2 xx = int3(tint_symbol.v).xx;
int2 xz = int3((*(tint_symbol)).v).xz; int2 xy = int3(tint_symbol.v).xy;
int2 yx = int3((*(tint_symbol)).v).yx; int2 xz = int3(tint_symbol.v).xz;
int2 yy = int3((*(tint_symbol)).v).yy; int2 yx = int3(tint_symbol.v).yx;
int2 yz = int3((*(tint_symbol)).v).yz; int2 yy = int3(tint_symbol.v).yy;
int2 zx = int3((*(tint_symbol)).v).zx; int2 yz = int3(tint_symbol.v).yz;
int2 zy = int3((*(tint_symbol)).v).zy; int2 zx = int3(tint_symbol.v).zx;
int2 zz = int3((*(tint_symbol)).v).zz; int2 zy = int3(tint_symbol.v).zy;
int3 xxx = int3((*(tint_symbol)).v).xxx; int2 zz = int3(tint_symbol.v).zz;
int3 xxy = int3((*(tint_symbol)).v).xxy; int3 xxx = int3(tint_symbol.v).xxx;
int3 xxz = int3((*(tint_symbol)).v).xxz; int3 xxy = int3(tint_symbol.v).xxy;
int3 xyx = int3((*(tint_symbol)).v).xyx; int3 xxz = int3(tint_symbol.v).xxz;
int3 xyy = int3((*(tint_symbol)).v).xyy; int3 xyx = int3(tint_symbol.v).xyx;
int3 xyz = int3((*(tint_symbol)).v).xyz; int3 xyy = int3(tint_symbol.v).xyy;
int3 xzx = int3((*(tint_symbol)).v).xzx; int3 xyz = int3(tint_symbol.v).xyz;
int3 xzy = int3((*(tint_symbol)).v).xzy; int3 xzx = int3(tint_symbol.v).xzx;
int3 xzz = int3((*(tint_symbol)).v).xzz; int3 xzy = int3(tint_symbol.v).xzy;
int3 yxx = int3((*(tint_symbol)).v).yxx; int3 xzz = int3(tint_symbol.v).xzz;
int3 yxy = int3((*(tint_symbol)).v).yxy; int3 yxx = int3(tint_symbol.v).yxx;
int3 yxz = int3((*(tint_symbol)).v).yxz; int3 yxy = int3(tint_symbol.v).yxy;
int3 yyx = int3((*(tint_symbol)).v).yyx; int3 yxz = int3(tint_symbol.v).yxz;
int3 yyy = int3((*(tint_symbol)).v).yyy; int3 yyx = int3(tint_symbol.v).yyx;
int3 yyz = int3((*(tint_symbol)).v).yyz; int3 yyy = int3(tint_symbol.v).yyy;
int3 yzx = int3((*(tint_symbol)).v).yzx; int3 yyz = int3(tint_symbol.v).yyz;
int3 yzy = int3((*(tint_symbol)).v).yzy; int3 yzx = int3(tint_symbol.v).yzx;
int3 yzz = int3((*(tint_symbol)).v).yzz; int3 yzy = int3(tint_symbol.v).yzy;
int3 zxx = int3((*(tint_symbol)).v).zxx; int3 yzz = int3(tint_symbol.v).yzz;
int3 zxy = int3((*(tint_symbol)).v).zxy; int3 zxx = int3(tint_symbol.v).zxx;
int3 zxz = int3((*(tint_symbol)).v).zxz; int3 zxy = int3(tint_symbol.v).zxy;
int3 zyx = int3((*(tint_symbol)).v).zyx; int3 zxz = int3(tint_symbol.v).zxz;
int3 zyy = int3((*(tint_symbol)).v).zyy; int3 zyx = int3(tint_symbol.v).zyx;
int3 zyz = int3((*(tint_symbol)).v).zyz; int3 zyy = int3(tint_symbol.v).zyy;
int3 zzx = int3((*(tint_symbol)).v).zzx; int3 zyz = int3(tint_symbol.v).zyz;
int3 zzy = int3((*(tint_symbol)).v).zzy; int3 zzx = int3(tint_symbol.v).zzx;
int3 zzz = int3((*(tint_symbol)).v).zzz; int3 zzy = int3(tint_symbol.v).zzy;
int4 xxxx = int3((*(tint_symbol)).v).xxxx; int3 zzz = int3(tint_symbol.v).zzz;
int4 xxxy = int3((*(tint_symbol)).v).xxxy; int4 xxxx = int3(tint_symbol.v).xxxx;
int4 xxxz = int3((*(tint_symbol)).v).xxxz; int4 xxxy = int3(tint_symbol.v).xxxy;
int4 xxyx = int3((*(tint_symbol)).v).xxyx; int4 xxxz = int3(tint_symbol.v).xxxz;
int4 xxyy = int3((*(tint_symbol)).v).xxyy; int4 xxyx = int3(tint_symbol.v).xxyx;
int4 xxyz = int3((*(tint_symbol)).v).xxyz; int4 xxyy = int3(tint_symbol.v).xxyy;
int4 xxzx = int3((*(tint_symbol)).v).xxzx; int4 xxyz = int3(tint_symbol.v).xxyz;
int4 xxzy = int3((*(tint_symbol)).v).xxzy; int4 xxzx = int3(tint_symbol.v).xxzx;
int4 xxzz = int3((*(tint_symbol)).v).xxzz; int4 xxzy = int3(tint_symbol.v).xxzy;
int4 xyxx = int3((*(tint_symbol)).v).xyxx; int4 xxzz = int3(tint_symbol.v).xxzz;
int4 xyxy = int3((*(tint_symbol)).v).xyxy; int4 xyxx = int3(tint_symbol.v).xyxx;
int4 xyxz = int3((*(tint_symbol)).v).xyxz; int4 xyxy = int3(tint_symbol.v).xyxy;
int4 xyyx = int3((*(tint_symbol)).v).xyyx; int4 xyxz = int3(tint_symbol.v).xyxz;
int4 xyyy = int3((*(tint_symbol)).v).xyyy; int4 xyyx = int3(tint_symbol.v).xyyx;
int4 xyyz = int3((*(tint_symbol)).v).xyyz; int4 xyyy = int3(tint_symbol.v).xyyy;
int4 xyzx = int3((*(tint_symbol)).v).xyzx; int4 xyyz = int3(tint_symbol.v).xyyz;
int4 xyzy = int3((*(tint_symbol)).v).xyzy; int4 xyzx = int3(tint_symbol.v).xyzx;
int4 xyzz = int3((*(tint_symbol)).v).xyzz; int4 xyzy = int3(tint_symbol.v).xyzy;
int4 xzxx = int3((*(tint_symbol)).v).xzxx; int4 xyzz = int3(tint_symbol.v).xyzz;
int4 xzxy = int3((*(tint_symbol)).v).xzxy; int4 xzxx = int3(tint_symbol.v).xzxx;
int4 xzxz = int3((*(tint_symbol)).v).xzxz; int4 xzxy = int3(tint_symbol.v).xzxy;
int4 xzyx = int3((*(tint_symbol)).v).xzyx; int4 xzxz = int3(tint_symbol.v).xzxz;
int4 xzyy = int3((*(tint_symbol)).v).xzyy; int4 xzyx = int3(tint_symbol.v).xzyx;
int4 xzyz = int3((*(tint_symbol)).v).xzyz; int4 xzyy = int3(tint_symbol.v).xzyy;
int4 xzzx = int3((*(tint_symbol)).v).xzzx; int4 xzyz = int3(tint_symbol.v).xzyz;
int4 xzzy = int3((*(tint_symbol)).v).xzzy; int4 xzzx = int3(tint_symbol.v).xzzx;
int4 xzzz = int3((*(tint_symbol)).v).xzzz; int4 xzzy = int3(tint_symbol.v).xzzy;
int4 yxxx = int3((*(tint_symbol)).v).yxxx; int4 xzzz = int3(tint_symbol.v).xzzz;
int4 yxxy = int3((*(tint_symbol)).v).yxxy; int4 yxxx = int3(tint_symbol.v).yxxx;
int4 yxxz = int3((*(tint_symbol)).v).yxxz; int4 yxxy = int3(tint_symbol.v).yxxy;
int4 yxyx = int3((*(tint_symbol)).v).yxyx; int4 yxxz = int3(tint_symbol.v).yxxz;
int4 yxyy = int3((*(tint_symbol)).v).yxyy; int4 yxyx = int3(tint_symbol.v).yxyx;
int4 yxyz = int3((*(tint_symbol)).v).yxyz; int4 yxyy = int3(tint_symbol.v).yxyy;
int4 yxzx = int3((*(tint_symbol)).v).yxzx; int4 yxyz = int3(tint_symbol.v).yxyz;
int4 yxzy = int3((*(tint_symbol)).v).yxzy; int4 yxzx = int3(tint_symbol.v).yxzx;
int4 yxzz = int3((*(tint_symbol)).v).yxzz; int4 yxzy = int3(tint_symbol.v).yxzy;
int4 yyxx = int3((*(tint_symbol)).v).yyxx; int4 yxzz = int3(tint_symbol.v).yxzz;
int4 yyxy = int3((*(tint_symbol)).v).yyxy; int4 yyxx = int3(tint_symbol.v).yyxx;
int4 yyxz = int3((*(tint_symbol)).v).yyxz; int4 yyxy = int3(tint_symbol.v).yyxy;
int4 yyyx = int3((*(tint_symbol)).v).yyyx; int4 yyxz = int3(tint_symbol.v).yyxz;
int4 yyyy = int3((*(tint_symbol)).v).yyyy; int4 yyyx = int3(tint_symbol.v).yyyx;
int4 yyyz = int3((*(tint_symbol)).v).yyyz; int4 yyyy = int3(tint_symbol.v).yyyy;
int4 yyzx = int3((*(tint_symbol)).v).yyzx; int4 yyyz = int3(tint_symbol.v).yyyz;
int4 yyzy = int3((*(tint_symbol)).v).yyzy; int4 yyzx = int3(tint_symbol.v).yyzx;
int4 yyzz = int3((*(tint_symbol)).v).yyzz; int4 yyzy = int3(tint_symbol.v).yyzy;
int4 yzxx = int3((*(tint_symbol)).v).yzxx; int4 yyzz = int3(tint_symbol.v).yyzz;
int4 yzxy = int3((*(tint_symbol)).v).yzxy; int4 yzxx = int3(tint_symbol.v).yzxx;
int4 yzxz = int3((*(tint_symbol)).v).yzxz; int4 yzxy = int3(tint_symbol.v).yzxy;
int4 yzyx = int3((*(tint_symbol)).v).yzyx; int4 yzxz = int3(tint_symbol.v).yzxz;
int4 yzyy = int3((*(tint_symbol)).v).yzyy; int4 yzyx = int3(tint_symbol.v).yzyx;
int4 yzyz = int3((*(tint_symbol)).v).yzyz; int4 yzyy = int3(tint_symbol.v).yzyy;
int4 yzzx = int3((*(tint_symbol)).v).yzzx; int4 yzyz = int3(tint_symbol.v).yzyz;
int4 yzzy = int3((*(tint_symbol)).v).yzzy; int4 yzzx = int3(tint_symbol.v).yzzx;
int4 yzzz = int3((*(tint_symbol)).v).yzzz; int4 yzzy = int3(tint_symbol.v).yzzy;
int4 zxxx = int3((*(tint_symbol)).v).zxxx; int4 yzzz = int3(tint_symbol.v).yzzz;
int4 zxxy = int3((*(tint_symbol)).v).zxxy; int4 zxxx = int3(tint_symbol.v).zxxx;
int4 zxxz = int3((*(tint_symbol)).v).zxxz; int4 zxxy = int3(tint_symbol.v).zxxy;
int4 zxyx = int3((*(tint_symbol)).v).zxyx; int4 zxxz = int3(tint_symbol.v).zxxz;
int4 zxyy = int3((*(tint_symbol)).v).zxyy; int4 zxyx = int3(tint_symbol.v).zxyx;
int4 zxyz = int3((*(tint_symbol)).v).zxyz; int4 zxyy = int3(tint_symbol.v).zxyy;
int4 zxzx = int3((*(tint_symbol)).v).zxzx; int4 zxyz = int3(tint_symbol.v).zxyz;
int4 zxzy = int3((*(tint_symbol)).v).zxzy; int4 zxzx = int3(tint_symbol.v).zxzx;
int4 zxzz = int3((*(tint_symbol)).v).zxzz; int4 zxzy = int3(tint_symbol.v).zxzy;
int4 zyxx = int3((*(tint_symbol)).v).zyxx; int4 zxzz = int3(tint_symbol.v).zxzz;
int4 zyxy = int3((*(tint_symbol)).v).zyxy; int4 zyxx = int3(tint_symbol.v).zyxx;
int4 zyxz = int3((*(tint_symbol)).v).zyxz; int4 zyxy = int3(tint_symbol.v).zyxy;
int4 zyyx = int3((*(tint_symbol)).v).zyyx; int4 zyxz = int3(tint_symbol.v).zyxz;
int4 zyyy = int3((*(tint_symbol)).v).zyyy; int4 zyyx = int3(tint_symbol.v).zyyx;
int4 zyyz = int3((*(tint_symbol)).v).zyyz; int4 zyyy = int3(tint_symbol.v).zyyy;
int4 zyzx = int3((*(tint_symbol)).v).zyzx; int4 zyyz = int3(tint_symbol.v).zyyz;
int4 zyzy = int3((*(tint_symbol)).v).zyzy; int4 zyzx = int3(tint_symbol.v).zyzx;
int4 zyzz = int3((*(tint_symbol)).v).zyzz; int4 zyzy = int3(tint_symbol.v).zyzy;
int4 zzxx = int3((*(tint_symbol)).v).zzxx; int4 zyzz = int3(tint_symbol.v).zyzz;
int4 zzxy = int3((*(tint_symbol)).v).zzxy; int4 zzxx = int3(tint_symbol.v).zzxx;
int4 zzxz = int3((*(tint_symbol)).v).zzxz; int4 zzxy = int3(tint_symbol.v).zzxy;
int4 zzyx = int3((*(tint_symbol)).v).zzyx; int4 zzxz = int3(tint_symbol.v).zzxz;
int4 zzyy = int3((*(tint_symbol)).v).zzyy; int4 zzyx = int3(tint_symbol.v).zzyx;
int4 zzyz = int3((*(tint_symbol)).v).zzyz; int4 zzyy = int3(tint_symbol.v).zzyy;
int4 zzzx = int3((*(tint_symbol)).v).zzzx; int4 zzyz = int3(tint_symbol.v).zzyz;
int4 zzzy = int3((*(tint_symbol)).v).zzzy; int4 zzzx = int3(tint_symbol.v).zzzx;
int4 zzzz = int3((*(tint_symbol)).v).zzzz; int4 zzzy = int3(tint_symbol.v).zzzy;
int4 zzzz = int3(tint_symbol.v).zzzz;
} }

View File

@ -5,127 +5,128 @@ struct S {
uint3 v; uint3 v;
}; };
void f(thread S* const tint_symbol) { void f() {
uint3 v = (*(tint_symbol)).v; thread S tint_symbol = {};
uint x = (*(tint_symbol)).v[0]; uint3 v = tint_symbol.v;
uint y = (*(tint_symbol)).v[1]; uint x = tint_symbol.v[0];
uint z = (*(tint_symbol)).v[2]; uint y = tint_symbol.v[1];
uint2 xx = uint3((*(tint_symbol)).v).xx; uint z = tint_symbol.v[2];
uint2 xy = uint3((*(tint_symbol)).v).xy; uint2 xx = uint3(tint_symbol.v).xx;
uint2 xz = uint3((*(tint_symbol)).v).xz; uint2 xy = uint3(tint_symbol.v).xy;
uint2 yx = uint3((*(tint_symbol)).v).yx; uint2 xz = uint3(tint_symbol.v).xz;
uint2 yy = uint3((*(tint_symbol)).v).yy; uint2 yx = uint3(tint_symbol.v).yx;
uint2 yz = uint3((*(tint_symbol)).v).yz; uint2 yy = uint3(tint_symbol.v).yy;
uint2 zx = uint3((*(tint_symbol)).v).zx; uint2 yz = uint3(tint_symbol.v).yz;
uint2 zy = uint3((*(tint_symbol)).v).zy; uint2 zx = uint3(tint_symbol.v).zx;
uint2 zz = uint3((*(tint_symbol)).v).zz; uint2 zy = uint3(tint_symbol.v).zy;
uint3 xxx = uint3((*(tint_symbol)).v).xxx; uint2 zz = uint3(tint_symbol.v).zz;
uint3 xxy = uint3((*(tint_symbol)).v).xxy; uint3 xxx = uint3(tint_symbol.v).xxx;
uint3 xxz = uint3((*(tint_symbol)).v).xxz; uint3 xxy = uint3(tint_symbol.v).xxy;
uint3 xyx = uint3((*(tint_symbol)).v).xyx; uint3 xxz = uint3(tint_symbol.v).xxz;
uint3 xyy = uint3((*(tint_symbol)).v).xyy; uint3 xyx = uint3(tint_symbol.v).xyx;
uint3 xyz = uint3((*(tint_symbol)).v).xyz; uint3 xyy = uint3(tint_symbol.v).xyy;
uint3 xzx = uint3((*(tint_symbol)).v).xzx; uint3 xyz = uint3(tint_symbol.v).xyz;
uint3 xzy = uint3((*(tint_symbol)).v).xzy; uint3 xzx = uint3(tint_symbol.v).xzx;
uint3 xzz = uint3((*(tint_symbol)).v).xzz; uint3 xzy = uint3(tint_symbol.v).xzy;
uint3 yxx = uint3((*(tint_symbol)).v).yxx; uint3 xzz = uint3(tint_symbol.v).xzz;
uint3 yxy = uint3((*(tint_symbol)).v).yxy; uint3 yxx = uint3(tint_symbol.v).yxx;
uint3 yxz = uint3((*(tint_symbol)).v).yxz; uint3 yxy = uint3(tint_symbol.v).yxy;
uint3 yyx = uint3((*(tint_symbol)).v).yyx; uint3 yxz = uint3(tint_symbol.v).yxz;
uint3 yyy = uint3((*(tint_symbol)).v).yyy; uint3 yyx = uint3(tint_symbol.v).yyx;
uint3 yyz = uint3((*(tint_symbol)).v).yyz; uint3 yyy = uint3(tint_symbol.v).yyy;
uint3 yzx = uint3((*(tint_symbol)).v).yzx; uint3 yyz = uint3(tint_symbol.v).yyz;
uint3 yzy = uint3((*(tint_symbol)).v).yzy; uint3 yzx = uint3(tint_symbol.v).yzx;
uint3 yzz = uint3((*(tint_symbol)).v).yzz; uint3 yzy = uint3(tint_symbol.v).yzy;
uint3 zxx = uint3((*(tint_symbol)).v).zxx; uint3 yzz = uint3(tint_symbol.v).yzz;
uint3 zxy = uint3((*(tint_symbol)).v).zxy; uint3 zxx = uint3(tint_symbol.v).zxx;
uint3 zxz = uint3((*(tint_symbol)).v).zxz; uint3 zxy = uint3(tint_symbol.v).zxy;
uint3 zyx = uint3((*(tint_symbol)).v).zyx; uint3 zxz = uint3(tint_symbol.v).zxz;
uint3 zyy = uint3((*(tint_symbol)).v).zyy; uint3 zyx = uint3(tint_symbol.v).zyx;
uint3 zyz = uint3((*(tint_symbol)).v).zyz; uint3 zyy = uint3(tint_symbol.v).zyy;
uint3 zzx = uint3((*(tint_symbol)).v).zzx; uint3 zyz = uint3(tint_symbol.v).zyz;
uint3 zzy = uint3((*(tint_symbol)).v).zzy; uint3 zzx = uint3(tint_symbol.v).zzx;
uint3 zzz = uint3((*(tint_symbol)).v).zzz; uint3 zzy = uint3(tint_symbol.v).zzy;
uint4 xxxx = uint3((*(tint_symbol)).v).xxxx; uint3 zzz = uint3(tint_symbol.v).zzz;
uint4 xxxy = uint3((*(tint_symbol)).v).xxxy; uint4 xxxx = uint3(tint_symbol.v).xxxx;
uint4 xxxz = uint3((*(tint_symbol)).v).xxxz; uint4 xxxy = uint3(tint_symbol.v).xxxy;
uint4 xxyx = uint3((*(tint_symbol)).v).xxyx; uint4 xxxz = uint3(tint_symbol.v).xxxz;
uint4 xxyy = uint3((*(tint_symbol)).v).xxyy; uint4 xxyx = uint3(tint_symbol.v).xxyx;
uint4 xxyz = uint3((*(tint_symbol)).v).xxyz; uint4 xxyy = uint3(tint_symbol.v).xxyy;
uint4 xxzx = uint3((*(tint_symbol)).v).xxzx; uint4 xxyz = uint3(tint_symbol.v).xxyz;
uint4 xxzy = uint3((*(tint_symbol)).v).xxzy; uint4 xxzx = uint3(tint_symbol.v).xxzx;
uint4 xxzz = uint3((*(tint_symbol)).v).xxzz; uint4 xxzy = uint3(tint_symbol.v).xxzy;
uint4 xyxx = uint3((*(tint_symbol)).v).xyxx; uint4 xxzz = uint3(tint_symbol.v).xxzz;
uint4 xyxy = uint3((*(tint_symbol)).v).xyxy; uint4 xyxx = uint3(tint_symbol.v).xyxx;
uint4 xyxz = uint3((*(tint_symbol)).v).xyxz; uint4 xyxy = uint3(tint_symbol.v).xyxy;
uint4 xyyx = uint3((*(tint_symbol)).v).xyyx; uint4 xyxz = uint3(tint_symbol.v).xyxz;
uint4 xyyy = uint3((*(tint_symbol)).v).xyyy; uint4 xyyx = uint3(tint_symbol.v).xyyx;
uint4 xyyz = uint3((*(tint_symbol)).v).xyyz; uint4 xyyy = uint3(tint_symbol.v).xyyy;
uint4 xyzx = uint3((*(tint_symbol)).v).xyzx; uint4 xyyz = uint3(tint_symbol.v).xyyz;
uint4 xyzy = uint3((*(tint_symbol)).v).xyzy; uint4 xyzx = uint3(tint_symbol.v).xyzx;
uint4 xyzz = uint3((*(tint_symbol)).v).xyzz; uint4 xyzy = uint3(tint_symbol.v).xyzy;
uint4 xzxx = uint3((*(tint_symbol)).v).xzxx; uint4 xyzz = uint3(tint_symbol.v).xyzz;
uint4 xzxy = uint3((*(tint_symbol)).v).xzxy; uint4 xzxx = uint3(tint_symbol.v).xzxx;
uint4 xzxz = uint3((*(tint_symbol)).v).xzxz; uint4 xzxy = uint3(tint_symbol.v).xzxy;
uint4 xzyx = uint3((*(tint_symbol)).v).xzyx; uint4 xzxz = uint3(tint_symbol.v).xzxz;
uint4 xzyy = uint3((*(tint_symbol)).v).xzyy; uint4 xzyx = uint3(tint_symbol.v).xzyx;
uint4 xzyz = uint3((*(tint_symbol)).v).xzyz; uint4 xzyy = uint3(tint_symbol.v).xzyy;
uint4 xzzx = uint3((*(tint_symbol)).v).xzzx; uint4 xzyz = uint3(tint_symbol.v).xzyz;
uint4 xzzy = uint3((*(tint_symbol)).v).xzzy; uint4 xzzx = uint3(tint_symbol.v).xzzx;
uint4 xzzz = uint3((*(tint_symbol)).v).xzzz; uint4 xzzy = uint3(tint_symbol.v).xzzy;
uint4 yxxx = uint3((*(tint_symbol)).v).yxxx; uint4 xzzz = uint3(tint_symbol.v).xzzz;
uint4 yxxy = uint3((*(tint_symbol)).v).yxxy; uint4 yxxx = uint3(tint_symbol.v).yxxx;
uint4 yxxz = uint3((*(tint_symbol)).v).yxxz; uint4 yxxy = uint3(tint_symbol.v).yxxy;
uint4 yxyx = uint3((*(tint_symbol)).v).yxyx; uint4 yxxz = uint3(tint_symbol.v).yxxz;
uint4 yxyy = uint3((*(tint_symbol)).v).yxyy; uint4 yxyx = uint3(tint_symbol.v).yxyx;
uint4 yxyz = uint3((*(tint_symbol)).v).yxyz; uint4 yxyy = uint3(tint_symbol.v).yxyy;
uint4 yxzx = uint3((*(tint_symbol)).v).yxzx; uint4 yxyz = uint3(tint_symbol.v).yxyz;
uint4 yxzy = uint3((*(tint_symbol)).v).yxzy; uint4 yxzx = uint3(tint_symbol.v).yxzx;
uint4 yxzz = uint3((*(tint_symbol)).v).yxzz; uint4 yxzy = uint3(tint_symbol.v).yxzy;
uint4 yyxx = uint3((*(tint_symbol)).v).yyxx; uint4 yxzz = uint3(tint_symbol.v).yxzz;
uint4 yyxy = uint3((*(tint_symbol)).v).yyxy; uint4 yyxx = uint3(tint_symbol.v).yyxx;
uint4 yyxz = uint3((*(tint_symbol)).v).yyxz; uint4 yyxy = uint3(tint_symbol.v).yyxy;
uint4 yyyx = uint3((*(tint_symbol)).v).yyyx; uint4 yyxz = uint3(tint_symbol.v).yyxz;
uint4 yyyy = uint3((*(tint_symbol)).v).yyyy; uint4 yyyx = uint3(tint_symbol.v).yyyx;
uint4 yyyz = uint3((*(tint_symbol)).v).yyyz; uint4 yyyy = uint3(tint_symbol.v).yyyy;
uint4 yyzx = uint3((*(tint_symbol)).v).yyzx; uint4 yyyz = uint3(tint_symbol.v).yyyz;
uint4 yyzy = uint3((*(tint_symbol)).v).yyzy; uint4 yyzx = uint3(tint_symbol.v).yyzx;
uint4 yyzz = uint3((*(tint_symbol)).v).yyzz; uint4 yyzy = uint3(tint_symbol.v).yyzy;
uint4 yzxx = uint3((*(tint_symbol)).v).yzxx; uint4 yyzz = uint3(tint_symbol.v).yyzz;
uint4 yzxy = uint3((*(tint_symbol)).v).yzxy; uint4 yzxx = uint3(tint_symbol.v).yzxx;
uint4 yzxz = uint3((*(tint_symbol)).v).yzxz; uint4 yzxy = uint3(tint_symbol.v).yzxy;
uint4 yzyx = uint3((*(tint_symbol)).v).yzyx; uint4 yzxz = uint3(tint_symbol.v).yzxz;
uint4 yzyy = uint3((*(tint_symbol)).v).yzyy; uint4 yzyx = uint3(tint_symbol.v).yzyx;
uint4 yzyz = uint3((*(tint_symbol)).v).yzyz; uint4 yzyy = uint3(tint_symbol.v).yzyy;
uint4 yzzx = uint3((*(tint_symbol)).v).yzzx; uint4 yzyz = uint3(tint_symbol.v).yzyz;
uint4 yzzy = uint3((*(tint_symbol)).v).yzzy; uint4 yzzx = uint3(tint_symbol.v).yzzx;
uint4 yzzz = uint3((*(tint_symbol)).v).yzzz; uint4 yzzy = uint3(tint_symbol.v).yzzy;
uint4 zxxx = uint3((*(tint_symbol)).v).zxxx; uint4 yzzz = uint3(tint_symbol.v).yzzz;
uint4 zxxy = uint3((*(tint_symbol)).v).zxxy; uint4 zxxx = uint3(tint_symbol.v).zxxx;
uint4 zxxz = uint3((*(tint_symbol)).v).zxxz; uint4 zxxy = uint3(tint_symbol.v).zxxy;
uint4 zxyx = uint3((*(tint_symbol)).v).zxyx; uint4 zxxz = uint3(tint_symbol.v).zxxz;
uint4 zxyy = uint3((*(tint_symbol)).v).zxyy; uint4 zxyx = uint3(tint_symbol.v).zxyx;
uint4 zxyz = uint3((*(tint_symbol)).v).zxyz; uint4 zxyy = uint3(tint_symbol.v).zxyy;
uint4 zxzx = uint3((*(tint_symbol)).v).zxzx; uint4 zxyz = uint3(tint_symbol.v).zxyz;
uint4 zxzy = uint3((*(tint_symbol)).v).zxzy; uint4 zxzx = uint3(tint_symbol.v).zxzx;
uint4 zxzz = uint3((*(tint_symbol)).v).zxzz; uint4 zxzy = uint3(tint_symbol.v).zxzy;
uint4 zyxx = uint3((*(tint_symbol)).v).zyxx; uint4 zxzz = uint3(tint_symbol.v).zxzz;
uint4 zyxy = uint3((*(tint_symbol)).v).zyxy; uint4 zyxx = uint3(tint_symbol.v).zyxx;
uint4 zyxz = uint3((*(tint_symbol)).v).zyxz; uint4 zyxy = uint3(tint_symbol.v).zyxy;
uint4 zyyx = uint3((*(tint_symbol)).v).zyyx; uint4 zyxz = uint3(tint_symbol.v).zyxz;
uint4 zyyy = uint3((*(tint_symbol)).v).zyyy; uint4 zyyx = uint3(tint_symbol.v).zyyx;
uint4 zyyz = uint3((*(tint_symbol)).v).zyyz; uint4 zyyy = uint3(tint_symbol.v).zyyy;
uint4 zyzx = uint3((*(tint_symbol)).v).zyzx; uint4 zyyz = uint3(tint_symbol.v).zyyz;
uint4 zyzy = uint3((*(tint_symbol)).v).zyzy; uint4 zyzx = uint3(tint_symbol.v).zyzx;
uint4 zyzz = uint3((*(tint_symbol)).v).zyzz; uint4 zyzy = uint3(tint_symbol.v).zyzy;
uint4 zzxx = uint3((*(tint_symbol)).v).zzxx; uint4 zyzz = uint3(tint_symbol.v).zyzz;
uint4 zzxy = uint3((*(tint_symbol)).v).zzxy; uint4 zzxx = uint3(tint_symbol.v).zzxx;
uint4 zzxz = uint3((*(tint_symbol)).v).zzxz; uint4 zzxy = uint3(tint_symbol.v).zzxy;
uint4 zzyx = uint3((*(tint_symbol)).v).zzyx; uint4 zzxz = uint3(tint_symbol.v).zzxz;
uint4 zzyy = uint3((*(tint_symbol)).v).zzyy; uint4 zzyx = uint3(tint_symbol.v).zzyx;
uint4 zzyz = uint3((*(tint_symbol)).v).zzyz; uint4 zzyy = uint3(tint_symbol.v).zzyy;
uint4 zzzx = uint3((*(tint_symbol)).v).zzzx; uint4 zzyz = uint3(tint_symbol.v).zzyz;
uint4 zzzy = uint3((*(tint_symbol)).v).zzzy; uint4 zzzx = uint3(tint_symbol.v).zzzx;
uint4 zzzz = uint3((*(tint_symbol)).v).zzzz; uint4 zzzy = uint3(tint_symbol.v).zzzy;
uint4 zzzz = uint3(tint_symbol.v).zzzz;
} }

View File

@ -5,10 +5,11 @@ struct S {
float3 v; float3 v;
}; };
void f(thread S* const tint_symbol) { void f() {
(*(tint_symbol)).v = float3(1.0f, 2.0f, 3.0f); thread S tint_symbol = {};
(*(tint_symbol)).v[0] = 1.0f; tint_symbol.v = float3(1.0f, 2.0f, 3.0f);
(*(tint_symbol)).v[1] = 2.0f; tint_symbol.v[0] = 1.0f;
(*(tint_symbol)).v[2] = 3.0f; tint_symbol.v[1] = 2.0f;
tint_symbol.v[2] = 3.0f;
} }

View File

@ -5,10 +5,11 @@ struct S {
int3 v; int3 v;
}; };
void f(thread S* const tint_symbol) { void f() {
(*(tint_symbol)).v = int3(1, 2, 3); thread S tint_symbol = {};
(*(tint_symbol)).v[0] = 1; tint_symbol.v = int3(1, 2, 3);
(*(tint_symbol)).v[1] = 2; tint_symbol.v[0] = 1;
(*(tint_symbol)).v[2] = 3; tint_symbol.v[1] = 2;
tint_symbol.v[2] = 3;
} }

View File

@ -5,10 +5,11 @@ struct S {
uint3 v; uint3 v;
}; };
void f(thread S* const tint_symbol) { void f() {
(*(tint_symbol)).v = uint3(1u, 2u, 3u); thread S tint_symbol = {};
(*(tint_symbol)).v[0] = 1u; tint_symbol.v = uint3(1u, 2u, 3u);
(*(tint_symbol)).v[1] = 2u; tint_symbol.v[0] = 1u;
(*(tint_symbol)).v[2] = 3u; tint_symbol.v[1] = 2u;
tint_symbol.v[2] = 3u;
} }

View File

@ -1,8 +1,10 @@
#include <metal_stdlib> #include <metal_stdlib>
using namespace metal; using namespace metal;
void f(thread int* const tint_symbol, thread int* const tint_symbol_1) { void f() {
int b = *(tint_symbol); thread int tint_symbol = 1;
int b__ = *(tint_symbol_1); thread int tint_symbol_1 = 2;
int b = tint_symbol;
int b__ = tint_symbol_1;
} }

View File

@ -1,8 +1,10 @@
#include <metal_stdlib> #include <metal_stdlib>
using namespace metal; using namespace metal;
void f(thread int* const tint_symbol, thread int* const tint_symbol_1) { void f() {
int b = *(tint_symbol); thread int tint_symbol = 1;
int _b = *(tint_symbol_1); thread int tint_symbol_1 = 2;
int b = tint_symbol;
int _b = tint_symbol_1;
} }

View File

@ -1,8 +1,10 @@
#include <metal_stdlib> #include <metal_stdlib>
using namespace metal; using namespace metal;
void f(thread int* const tint_symbol, thread int* const tint_symbol_1) { void f() {
int B = *(tint_symbol); thread int tint_symbol = 1;
int _B = *(tint_symbol_1); thread int tint_symbol_1 = 2;
int B = tint_symbol;
int _B = tint_symbol_1;
} }

View File

@ -1,15 +1,15 @@
#include <metal_stdlib> #include <metal_stdlib>
using namespace metal; using namespace metal;
void main_1(thread int* const tint_symbol_1) { void main_1() {
int const x_9 = *(tint_symbol_1); thread int tint_symbol_1 = 0;
int const x_9 = tint_symbol_1;
int const x_11 = as_type<int>((as_type<uint>(x_9) + as_type<uint>(1))); int const x_11 = as_type<int>((as_type<uint>(x_9) + as_type<uint>(1)));
return; return;
} }
kernel void tint_symbol() { kernel void tint_symbol() {
thread int tint_symbol_2 = 0; main_1();
main_1(&(tint_symbol_2));
return; return;
} }

View File

@ -5,16 +5,16 @@ struct S {
int i; int i;
}; };
void main_1(thread S* const tint_symbol_1) { void main_1() {
thread S tint_symbol_1 = {};
int i = 0; int i = 0;
int const x_15 = (*(tint_symbol_1)).i; int const x_15 = tint_symbol_1.i;
i = x_15; i = x_15;
return; return;
} }
kernel void tint_symbol() { kernel void tint_symbol() {
thread S tint_symbol_2 = {}; main_1();
main_1(&(tint_symbol_2));
return; return;
} }

View File

@ -1,15 +1,15 @@
#include <metal_stdlib> #include <metal_stdlib>
using namespace metal; using namespace metal;
void main_1(thread int* const tint_symbol_1) { void main_1() {
*(tint_symbol_1) = 123; thread int tint_symbol_1 = 0;
*(tint_symbol_1) = as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(100) + as_type<uint>(20)))) + as_type<uint>(3))); tint_symbol_1 = 123;
tint_symbol_1 = as_type<int>((as_type<uint>(as_type<int>((as_type<uint>(100) + as_type<uint>(20)))) + as_type<uint>(3)));
return; return;
} }
kernel void tint_symbol() { kernel void tint_symbol() {
thread int tint_symbol_2 = 0; main_1();
main_1(&(tint_symbol_2));
return; return;
} }

View File

@ -5,14 +5,14 @@ struct S {
int i; int i;
}; };
void main_1(thread S* const tint_symbol_1) { void main_1() {
(*(tint_symbol_1)).i = 5; thread S tint_symbol_1 = {};
tint_symbol_1.i = 5;
return; return;
} }
kernel void tint_symbol() { kernel void tint_symbol() {
thread S tint_symbol_2 = {}; main_1();
main_1(&(tint_symbol_2));
return; return;
} }

View File

@ -31,18 +31,18 @@ struct OuterS {
tint_array<S1, 8> a1; tint_array<S1, 8> a1;
}; };
uint getNextIndex(thread uint* const tint_symbol_3) { uint getNextIndex() {
*(tint_symbol_3) = (*(tint_symbol_3) + 1u); thread uint tint_symbol_3 = 0u;
return *(tint_symbol_3); tint_symbol_3 = (tint_symbol_3 + 1u);
return tint_symbol_3;
} }
kernel void tint_symbol(const constant Uniforms* tint_symbol_5 [[buffer(0)]]) { kernel void tint_symbol(const constant Uniforms* tint_symbol_4 [[buffer(0)]]) {
thread uint tint_symbol_4 = 0u;
InnerS v = {}; InnerS v = {};
OuterS s = {}; OuterS s = {};
InnerS const tint_symbol_1 = v; InnerS const tint_symbol_1 = v;
uint const tint_symbol_2 = getNextIndex(&(tint_symbol_4)); uint const tint_symbol_2 = getNextIndex();
s.a1[tint_symbol_2].a2[(*(tint_symbol_5)).j] = tint_symbol_1; s.a1[tint_symbol_2].a2[(*(tint_symbol_4)).j] = tint_symbol_1;
return; return;
} }

View File

@ -1,14 +1,16 @@
#include <metal_stdlib> #include <metal_stdlib>
using namespace metal; using namespace metal;
void foo(int maybe_zero, thread int* const tint_symbol, thread float* const tint_symbol_1) { void foo(int maybe_zero) {
*(tint_symbol) = (*(tint_symbol) / 0); thread int tint_symbol = 0;
*(tint_symbol) = (*(tint_symbol) % 0); thread float tint_symbol_1 = 0.0f;
*(tint_symbol) = (*(tint_symbol) / maybe_zero); tint_symbol = (tint_symbol / 0);
*(tint_symbol) = (*(tint_symbol) % maybe_zero); tint_symbol = (tint_symbol % 0);
*(tint_symbol_1) = (*(tint_symbol_1) / 0.0f); tint_symbol = (tint_symbol / maybe_zero);
*(tint_symbol_1) = fmod(*(tint_symbol_1), 0.0f); tint_symbol = (tint_symbol % maybe_zero);
*(tint_symbol_1) = (*(tint_symbol_1) / float(maybe_zero)); tint_symbol_1 = (tint_symbol_1 / 0.0f);
*(tint_symbol_1) = fmod(*(tint_symbol_1), float(maybe_zero)); tint_symbol_1 = fmod(tint_symbol_1, 0.0f);
tint_symbol_1 = (tint_symbol_1 / float(maybe_zero));
tint_symbol_1 = fmod(tint_symbol_1, float(maybe_zero));
} }

View File

@ -1,9 +1,12 @@
#include <metal_stdlib> #include <metal_stdlib>
using namespace metal; using namespace metal;
void foo(thread int* const tint_symbol, thread float4* const tint_symbol_1, thread float2x2* const tint_symbol_2) { void foo() {
*(tint_symbol) = (*(tint_symbol) / 2); thread int tint_symbol = 0;
*(tint_symbol_1) = (*(tint_symbol_1) * float4x4(float4(0.0f), float4(0.0f), float4(0.0f), float4(0.0f))); thread float4 tint_symbol_1 = 0.0f;
*(tint_symbol_2) = (*(tint_symbol_2) * 2.0f); thread float2x2 tint_symbol_2 = float2x2(0.0f);
tint_symbol = (tint_symbol / 2);
tint_symbol_1 = (tint_symbol_1 * float4x4(float4(0.0f), float4(0.0f), float4(0.0f), float4(0.0f)));
tint_symbol_2 = (tint_symbol_2 * 2.0f);
} }

View File

@ -1,7 +1,8 @@
#include <metal_stdlib> #include <metal_stdlib>
using namespace metal; using namespace metal;
void tint_symbol(thread int* const tint_symbol_1) { void tint_symbol() {
*(tint_symbol_1) = as_type<int>((as_type<uint>(*(tint_symbol_1)) - as_type<uint>(1))); thread int tint_symbol_1 = 0;
tint_symbol_1 = as_type<int>((as_type<uint>(tint_symbol_1) - as_type<uint>(1)));
} }

View File

@ -1,7 +1,8 @@
#include <metal_stdlib> #include <metal_stdlib>
using namespace metal; using namespace metal;
void tint_symbol(thread int* const tint_symbol_1) { void tint_symbol() {
*(tint_symbol_1) = as_type<int>((as_type<uint>(*(tint_symbol_1)) + as_type<uint>(1))); thread int tint_symbol_1 = 0;
tint_symbol_1 = as_type<int>((as_type<uint>(tint_symbol_1) + as_type<uint>(1)));
} }