writers: Use the new sem::Module::DependencyOrderedDeclarations

As the resolver currently enforces in-order declarations, this does not
change the declaration order from iterating over the
ast::Module::GlobalDeclarations.

The MSL backend has been changed to use the
sem::Module::DependencyOrderedDeclarations list instead of looping over
different declaration types separately.

Bug: tint:1266
Change-Id: I698d612032285311017bfceab3c42adae1928a0e
Reviewed-on: https://dawn-review.googlesource.com/c/tint/+/79767
Reviewed-by: James Price <jrprice@google.com>
Kokoro: Kokoro <noreply+kokoro@google.com>
This commit is contained in:
Ben Clayton 2022-02-09 23:55:51 +00:00
parent a52be6c9ec
commit 8ec32a6ec9
841 changed files with 3258 additions and 2784 deletions

View File

@ -36,6 +36,7 @@
#include "src/sem/depth_texture_type.h" #include "src/sem/depth_texture_type.h"
#include "src/sem/function.h" #include "src/sem/function.h"
#include "src/sem/member_accessor_expression.h" #include "src/sem/member_accessor_expression.h"
#include "src/sem/module.h"
#include "src/sem/multisampled_texture_type.h" #include "src/sem/multisampled_texture_type.h"
#include "src/sem/sampled_texture_type.h" #include "src/sem/sampled_texture_type.h"
#include "src/sem/statement.h" #include "src/sem/statement.h"
@ -147,7 +148,8 @@ bool GeneratorImpl::Generate() {
line(); line();
for (auto* decl : builder_.AST().GlobalDeclarations()) { auto* mod = builder_.Sem().Module();
for (auto* decl : mod->DependencyOrderedDeclarations()) {
if (decl->Is<ast::Alias>()) { if (decl->Is<ast::Alias>()) {
continue; // Ignore aliases. continue; // Ignore aliases.
} }

View File

@ -37,6 +37,7 @@
#include "src/sem/depth_texture_type.h" #include "src/sem/depth_texture_type.h"
#include "src/sem/function.h" #include "src/sem/function.h"
#include "src/sem/member_accessor_expression.h" #include "src/sem/member_accessor_expression.h"
#include "src/sem/module.h"
#include "src/sem/multisampled_texture_type.h" #include "src/sem/multisampled_texture_type.h"
#include "src/sem/sampled_texture_type.h" #include "src/sem/sampled_texture_type.h"
#include "src/sem/statement.h" #include "src/sem/statement.h"
@ -223,7 +224,8 @@ bool GeneratorImpl::Generate() {
const TypeInfo* last_kind = nullptr; const TypeInfo* last_kind = nullptr;
size_t last_padding_line = 0; size_t last_padding_line = 0;
for (auto* decl : builder_.AST().GlobalDeclarations()) { auto* mod = builder_.Sem().Module();
for (auto* decl : mod->DependencyOrderedDeclarations()) {
if (decl->Is<ast::Alias>()) { if (decl->Is<ast::Alias>()) {
continue; // Ignore aliases. continue; // Ignore aliases.
} }

View File

@ -45,6 +45,7 @@
#include "src/sem/i32_type.h" #include "src/sem/i32_type.h"
#include "src/sem/matrix_type.h" #include "src/sem/matrix_type.h"
#include "src/sem/member_accessor_expression.h" #include "src/sem/member_accessor_expression.h"
#include "src/sem/module.h"
#include "src/sem/multisampled_texture_type.h" #include "src/sem/multisampled_texture_type.h"
#include "src/sem/pointer_type.h" #include "src/sem/pointer_type.h"
#include "src/sem/reference_type.h" #include "src/sem/reference_type.h"
@ -207,42 +208,44 @@ bool GeneratorImpl::Generate() {
auto helpers_insertion_point = current_buffer_->lines.size(); auto helpers_insertion_point = current_buffer_->lines.size();
for (auto* const type_decl : program_->AST().TypeDecls()) { auto* mod = builder_.Sem().Module();
if (!type_decl->Is<ast::Alias>()) { for (auto* decl : mod->DependencyOrderedDeclarations()) {
if (!EmitTypeDecl(TypeOf(type_decl))) { bool ok = Switch(
return false; decl, //
} [&](const ast::Struct* str) {
} TINT_DEFER(line());
} return EmitTypeDecl(TypeOf(str));
},
if (!program_->AST().TypeDecls().empty()) { [&](const ast::Alias*) {
line(); return true; // folded away by the writer
} },
[&](const ast::Variable* var) {
for (auto* var : program_->AST().GlobalVariables()) {
if (var->is_const) { if (var->is_const) {
if (!EmitProgramConstVariable(var)) { TINT_DEFER(line());
return false; return EmitProgramConstVariable(var);
} }
} else {
// These are pushed into the entry point by sanitizer transforms. // These are pushed into the entry point by sanitizer transforms.
TINT_ICE(Writer, diagnostics_) << "module-scope variables should have " TINT_ICE(Writer, diagnostics_)
"been handled by the MSL sanitizer"; << "module-scope variables should have been handled by the MSL "
break; "sanitizer";
return false;
},
[&](const ast::Function* func) {
TINT_DEFER(line());
if (func->IsEntryPoint()) {
return EmitEntryPointFunction(func);
} }
} return EmitFunction(func);
},
for (auto* func : program_->AST().Functions()) { [&](Default) {
if (!func->IsEntryPoint()) { // These are pushed into the entry point by sanitizer transforms.
if (!EmitFunction(func)) { TINT_ICE(Writer, diagnostics_)
<< "unhandled type: " << decl->TypeInfo().name;
return false;
});
if (!ok) {
return false; return false;
} }
} else {
if (!EmitEntryPointFunction(func)) {
return false;
}
}
line();
} }
if (!invariant_define_name_.empty()) { if (!invariant_define_name_.empty()) {
@ -1555,11 +1558,12 @@ bool GeneratorImpl::EmitLiteral(std::ostream& out,
return true; return true;
}, },
[&](const ast::SintLiteralExpression* l) { [&](const ast::SintLiteralExpression* l) {
// MSL (and C++) parse `-2147483648` as a `long` because it parses unary // MSL (and C++) parse `-2147483648` as a `long` because it parses
// minus and `2147483648` as separate tokens, and the latter doesn't // unary minus and `2147483648` as separate tokens, and the latter
// fit into an (32-bit) `int`. WGSL, OTOH, parses this as an `i32`. To // doesn't fit into an (32-bit) `int`. WGSL, OTOH, parses this as an
// avoid issues with `long` to `int` casts, emit `(2147483647 - 1)` // `i32`. To avoid issues with `long` to `int` casts, emit
// instead, which ensures the expression type is `int`. // `(2147483647 - 1)` instead, which ensures the expression type is
// `int`.
const auto int_min = std::numeric_limits<int32_t>::min(); const auto int_min = std::numeric_limits<int32_t>::min();
if (l->ValueAsI32() == int_min) { if (l->ValueAsI32() == int_min) {
out << "(" << int_min + 1 << " - 1)"; out << "(" << int_min + 1 << " - 1)";
@ -1741,8 +1745,8 @@ std::string GeneratorImpl::interpolation_to_attribute(
bool GeneratorImpl::EmitEntryPointFunction(const ast::Function* func) { bool GeneratorImpl::EmitEntryPointFunction(const ast::Function* func) {
auto func_name = program_->Symbols().NameFor(func->symbol); auto func_name = program_->Symbols().NameFor(func->symbol);
// Returns the binding index of a variable, requiring that the group attribute // Returns the binding index of a variable, requiring that the group
// have a value of zero. // attribute have a value of zero.
const uint32_t kInvalidBindingIndex = std::numeric_limits<uint32_t>::max(); const uint32_t kInvalidBindingIndex = std::numeric_limits<uint32_t>::max();
auto get_binding_index = [&](const ast::Variable* var) -> uint32_t { auto get_binding_index = [&](const ast::Variable* var) -> uint32_t {
auto bp = var->BindingPoint(); auto bp = var->BindingPoint();
@ -1923,14 +1927,14 @@ bool GeneratorImpl::EmitForLoop(const ast::ForLoopStatement* stmt) {
} }
} }
// If the for-loop has a multi-statement conditional and / or continuing, then // If the for-loop has a multi-statement conditional and / or continuing,
// we cannot emit this as a regular for-loop in MSL. Instead we need to // then we cannot emit this as a regular for-loop in MSL. Instead we need to
// generate a `while(true)` loop. // generate a `while(true)` loop.
bool emit_as_loop = cond_pre.lines.size() > 0 || cont_buf.lines.size() > 1; bool emit_as_loop = cond_pre.lines.size() > 0 || cont_buf.lines.size() > 1;
// If the for-loop has multi-statement initializer, or is going to be emitted // If the for-loop has multi-statement initializer, or is going to be
// as a `while(true)` loop, then declare the initializer statement(s) before // emitted as a `while(true)` loop, then declare the initializer
// the loop in a new block. // statement(s) before the loop in a new block.
bool nest_in_block = bool nest_in_block =
init_buf.lines.size() > 1 || (stmt->initializer && emit_as_loop); init_buf.lines.size() > 1 || (stmt->initializer && emit_as_loop);
if (nest_in_block) { if (nest_in_block) {

View File

@ -107,6 +107,7 @@ using namespace metal;
struct tint_symbol_1 { struct tint_symbol_1 {
float foo [[user(locn0)]]; float foo [[user(locn0)]];
}; };
struct tint_symbol_2 { struct tint_symbol_2 {
float value [[color(1)]]; float value [[color(1)]];
}; };
@ -207,15 +208,12 @@ struct Interface {
float col2; float col2;
float4 pos; float4 pos;
}; };
struct tint_symbol { struct tint_symbol {
float col1 [[user(locn1)]]; float col1 [[user(locn1)]];
float col2 [[user(locn2)]]; float col2 [[user(locn2)]];
float4 pos [[position]]; float4 pos [[position]];
}; };
struct tint_symbol_2 {
float col1 [[user(locn1)]];
float col2 [[user(locn2)]];
};
Interface vert_main_inner() { Interface vert_main_inner() {
Interface const tint_symbol_3 = {.col1=0.5f, .col2=0.25f, .pos=float4()}; Interface const tint_symbol_3 = {.col1=0.5f, .col2=0.25f, .pos=float4()};
@ -231,6 +229,11 @@ vertex tint_symbol vert_main() {
return wrapper_result; return wrapper_result;
} }
struct tint_symbol_2 {
float col1 [[user(locn1)]];
float col2 [[user(locn2)]];
};
void frag_main_inner(Interface colors) { void frag_main_inner(Interface colors) {
float const r = colors.col1; float const r = colors.col1;
float const g = colors.col2; float const g = colors.col2;
@ -285,18 +288,16 @@ using namespace metal;
struct VertexOutput { struct VertexOutput {
float4 pos; float4 pos;
}; };
struct tint_symbol {
float4 pos [[position]];
};
struct tint_symbol_1 {
float4 pos [[position]];
};
VertexOutput foo(float x) { VertexOutput foo(float x) {
VertexOutput const tint_symbol_2 = {.pos=float4(x, x, x, 1.0f)}; VertexOutput const tint_symbol_2 = {.pos=float4(x, x, x, 1.0f)};
return tint_symbol_2; return tint_symbol_2;
} }
struct tint_symbol {
float4 pos [[position]];
};
VertexOutput vert_main1_inner() { VertexOutput vert_main1_inner() {
return foo(0.5f); return foo(0.5f);
} }
@ -308,6 +309,10 @@ vertex tint_symbol vert_main1() {
return wrapper_result; return wrapper_result;
} }
struct tint_symbol_1 {
float4 pos [[position]];
};
VertexOutput vert_main2_inner() { VertexOutput vert_main2_inner() {
return foo(0.25f); return foo(0.25f);
} }

View File

@ -57,6 +57,7 @@ using namespace metal;
struct tint_symbol { struct tint_symbol {
/* 0x0000 */ uint4 buffer_size[1]; /* 0x0000 */ uint4 buffer_size[1];
}; };
struct my_struct { struct my_struct {
float a[1]; float a[1];
}; };
@ -103,6 +104,7 @@ using namespace metal;
struct tint_symbol { struct tint_symbol {
/* 0x0000 */ uint4 buffer_size[1]; /* 0x0000 */ uint4 buffer_size[1];
}; };
struct my_struct { struct my_struct {
float z; float z;
float a[1]; float a[1];
@ -152,6 +154,7 @@ using namespace metal;
struct tint_symbol { struct tint_symbol {
/* 0x0000 */ uint4 buffer_size[1]; /* 0x0000 */ uint4 buffer_size[1];
}; };
struct my_struct { struct my_struct {
float a[1]; float a[1];
}; };
@ -208,6 +211,7 @@ using namespace metal;
struct tint_symbol { struct tint_symbol {
/* 0x0000 */ uint4 buffer_size[2]; /* 0x0000 */ uint4 buffer_size[2];
}; };
struct my_struct { struct my_struct {
float a[1]; float a[1];
}; };

View File

@ -190,6 +190,7 @@ using namespace metal;
struct tint_array_wrapper { struct tint_array_wrapper {
float2x2 arr[4]; float2x2 arr[4];
}; };
struct tint_symbol_3 { struct tint_symbol_3 {
tint_array_wrapper m; tint_array_wrapper m;
}; };
@ -240,9 +241,11 @@ struct S1 {
float2x2 m1; float2x2 m1;
float4x4 m2; float4x4 m2;
}; };
struct S2 { struct S2 {
S1 s; S1 s;
}; };
struct tint_symbol_4 { struct tint_symbol_4 {
S2 s; S2 s;
}; };
@ -316,11 +319,13 @@ struct tint_symbol_7 {
float2x3 m2; float2x3 m2;
float2x4 m3; float2x4 m3;
}; };
struct tint_symbol_15 { struct tint_symbol_15 {
float3x2 m4; float3x2 m4;
float3x3 m5; float3x3 m5;
float3x4 m6; float3x4 m6;
}; };
struct tint_symbol_23 { struct tint_symbol_23 {
float4x2 m7; float4x2 m7;
float4x3 m8; float4x3 m8;

View File

@ -31,6 +31,7 @@
#include "src/sem/depth_texture_type.h" #include "src/sem/depth_texture_type.h"
#include "src/sem/function.h" #include "src/sem/function.h"
#include "src/sem/member_accessor_expression.h" #include "src/sem/member_accessor_expression.h"
#include "src/sem/module.h"
#include "src/sem/multisampled_texture_type.h" #include "src/sem/multisampled_texture_type.h"
#include "src/sem/reference_type.h" #include "src/sem/reference_type.h"
#include "src/sem/sampled_texture_type.h" #include "src/sem/sampled_texture_type.h"
@ -308,11 +309,14 @@ bool Builder::Build() {
} }
} }
for (auto* func : builder_.AST().Functions()) { auto* mod = builder_.Sem().Module();
for (auto* decl : mod->DependencyOrderedDeclarations()) {
if (auto* func = decl->As<ast::Function>()) {
if (!GenerateFunction(func)) { if (!GenerateFunction(func)) {
return false; return false;
} }
} }
}
return true; return true;
} }

View File

@ -4,18 +4,10 @@ using namespace metal;
struct tint_array_wrapper { struct tint_array_wrapper {
/* 0x0000 */ int4 arr[4]; /* 0x0000 */ int4 arr[4];
}; };
struct S { struct S {
/* 0x0000 */ tint_array_wrapper arr; /* 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 ret_arr() {
tint_array_wrapper const tint_symbol = {.arr={}}; tint_array_wrapper const tint_symbol = {.arr={}};
@ -27,6 +19,18 @@ S ret_struct_arr() {
return tint_symbol_1; return tint_symbol_1;
} }
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];
};
void foo(tint_array_wrapper src_param, thread tint_array_wrapper* const tint_symbol_3, threadgroup tint_array_wrapper* const tint_symbol_4, const constant S* const tint_symbol_5, device S* const tint_symbol_6) { void foo(tint_array_wrapper src_param, thread tint_array_wrapper* const tint_symbol_3, threadgroup tint_array_wrapper* const tint_symbol_4, const constant S* const tint_symbol_5, device S* const tint_symbol_6) {
tint_array_wrapper src_function = {}; tint_array_wrapper src_function = {};
tint_array_wrapper dst = {}; tint_array_wrapper dst = {};

View File

@ -4,15 +4,19 @@ using namespace metal;
struct tint_array_wrapper { struct tint_array_wrapper {
/* 0x0000 */ int4 arr[4]; /* 0x0000 */ int4 arr[4];
}; };
struct S { struct S {
/* 0x0000 */ tint_array_wrapper arr; /* 0x0000 */ tint_array_wrapper arr;
}; };
struct tint_array_wrapper_3 { struct tint_array_wrapper_3 {
int arr[2]; int arr[2];
}; };
struct tint_array_wrapper_2 { struct tint_array_wrapper_2 {
tint_array_wrapper_3 arr[3]; tint_array_wrapper_3 arr[3];
}; };
struct tint_array_wrapper_1 { struct tint_array_wrapper_1 {
tint_array_wrapper_2 arr[4]; tint_array_wrapper_2 arr[4];
}; };

View File

@ -4,18 +4,23 @@ using namespace metal;
struct tint_array_wrapper { struct tint_array_wrapper {
/* 0x0000 */ int4 arr[4]; /* 0x0000 */ int4 arr[4];
}; };
struct S { struct S {
/* 0x0000 */ tint_array_wrapper arr; /* 0x0000 */ tint_array_wrapper arr;
}; };
struct tint_array_wrapper_3 { struct tint_array_wrapper_3 {
/* 0x0000 */ int arr[2]; /* 0x0000 */ int arr[2];
}; };
struct tint_array_wrapper_2 { struct tint_array_wrapper_2 {
/* 0x0000 */ tint_array_wrapper_3 arr[3]; /* 0x0000 */ tint_array_wrapper_3 arr[3];
}; };
struct tint_array_wrapper_1 { struct tint_array_wrapper_1 {
/* 0x0000 */ tint_array_wrapper_2 arr[4]; /* 0x0000 */ tint_array_wrapper_2 arr[4];
}; };
struct S_nested { struct S_nested {
/* 0x0000 */ tint_array_wrapper_1 arr; /* 0x0000 */ tint_array_wrapper_1 arr;
}; };

View File

@ -4,9 +4,11 @@ using namespace metal;
struct tint_array_wrapper { struct tint_array_wrapper {
int arr[4]; int arr[4];
}; };
struct S { struct S {
tint_array_wrapper arr; tint_array_wrapper arr;
}; };
struct tint_array_wrapper_1 { struct tint_array_wrapper_1 {
tint_array_wrapper arr[2]; tint_array_wrapper arr[2];
}; };

View File

@ -4,15 +4,19 @@ using namespace metal;
struct tint_array_wrapper { struct tint_array_wrapper {
/* 0x0000 */ int4 arr[4]; /* 0x0000 */ int4 arr[4];
}; };
struct S { struct S {
/* 0x0000 */ tint_array_wrapper arr; /* 0x0000 */ tint_array_wrapper arr;
}; };
struct tint_array_wrapper_3 { struct tint_array_wrapper_3 {
int arr[2]; int arr[2];
}; };
struct tint_array_wrapper_2 { struct tint_array_wrapper_2 {
tint_array_wrapper_3 arr[3]; tint_array_wrapper_3 arr[3];
}; };
struct tint_array_wrapper_1 { struct tint_array_wrapper_1 {
tint_array_wrapper_2 arr[4]; tint_array_wrapper_2 arr[4];
}; };

View File

@ -4,21 +4,23 @@ using namespace metal;
struct tint_array_wrapper { struct tint_array_wrapper {
float arr[4]; float arr[4];
}; };
struct tint_array_wrapper_1 {
tint_array_wrapper arr[3];
};
struct tint_array_wrapper_2 {
tint_array_wrapper_1 arr[2];
};
float f1(tint_array_wrapper a) { float f1(tint_array_wrapper a) {
return a.arr[3]; return a.arr[3];
} }
struct tint_array_wrapper_1 {
tint_array_wrapper arr[3];
};
float f2(tint_array_wrapper_1 a) { float f2(tint_array_wrapper_1 a) {
return a.arr[2].arr[3]; return a.arr[2].arr[3];
} }
struct tint_array_wrapper_2 {
tint_array_wrapper_1 arr[2];
};
float f3(tint_array_wrapper_2 a) { float f3(tint_array_wrapper_2 a) {
return a.arr[1].arr[2].arr[3]; return a.arr[1].arr[2].arr[3];
} }

View File

@ -4,23 +4,25 @@ using namespace metal;
struct tint_array_wrapper { struct tint_array_wrapper {
float arr[4]; float arr[4];
}; };
struct tint_array_wrapper_1 {
tint_array_wrapper arr[3];
};
struct tint_array_wrapper_2 {
tint_array_wrapper_1 arr[2];
};
tint_array_wrapper f1() { tint_array_wrapper f1() {
tint_array_wrapper const tint_symbol_1 = {.arr={}}; tint_array_wrapper const tint_symbol_1 = {.arr={}};
return tint_symbol_1; return tint_symbol_1;
} }
struct tint_array_wrapper_1 {
tint_array_wrapper arr[3];
};
tint_array_wrapper_1 f2() { tint_array_wrapper_1 f2() {
tint_array_wrapper_1 const tint_symbol_2 = {.arr={f1(), f1(), f1()}}; tint_array_wrapper_1 const tint_symbol_2 = {.arr={f1(), f1(), f1()}};
return tint_symbol_2; return tint_symbol_2;
} }
struct tint_array_wrapper_2 {
tint_array_wrapper_1 arr[2];
};
tint_array_wrapper_2 f3() { tint_array_wrapper_2 f3() {
tint_array_wrapper_2 const tint_symbol_3 = {.arr={f2(), f2()}}; tint_array_wrapper_2 const tint_symbol_3 = {.arr={f2(), f2()}};
return tint_symbol_3; return tint_symbol_3;

View File

@ -1,12 +1,14 @@
#include <metal_stdlib> #include <metal_stdlib>
using namespace metal; using namespace metal;
constant int slen = 4;
constant uint ulen = 4u;
struct tint_array_wrapper { struct tint_array_wrapper {
float arr[4]; float arr[4];
}; };
constant int slen = 4;
constant uint ulen = 4u;
fragment void tint_symbol() { fragment void tint_symbol() {
tint_array_wrapper signed_literal = {}; tint_array_wrapper signed_literal = {};
tint_array_wrapper unsigned_literal = {}; tint_array_wrapper unsigned_literal = {};

View File

@ -5,19 +5,24 @@ struct strided_arr {
/* 0x0000 */ float el; /* 0x0000 */ float el;
/* 0x0004 */ int8_t tint_pad[4]; /* 0x0004 */ int8_t tint_pad[4];
}; };
struct tint_array_wrapper { struct tint_array_wrapper {
/* 0x0000 */ strided_arr arr[2]; /* 0x0000 */ strided_arr arr[2];
}; };
struct tint_array_wrapper_1 { struct tint_array_wrapper_1 {
/* 0x0000 */ tint_array_wrapper arr[3]; /* 0x0000 */ tint_array_wrapper arr[3];
}; };
struct strided_arr_1 { struct strided_arr_1 {
/* 0x0000 */ tint_array_wrapper_1 el; /* 0x0000 */ tint_array_wrapper_1 el;
/* 0x0030 */ int8_t tint_pad_1[80]; /* 0x0030 */ int8_t tint_pad_1[80];
}; };
struct tint_array_wrapper_2 { struct tint_array_wrapper_2 {
/* 0x0000 */ strided_arr_1 arr[4]; /* 0x0000 */ strided_arr_1 arr[4];
}; };
struct S { struct S {
/* 0x0000 */ tint_array_wrapper_2 a; /* 0x0000 */ tint_array_wrapper_2 a;
}; };

View File

@ -4,12 +4,15 @@ using namespace metal;
struct tint_array_wrapper { struct tint_array_wrapper {
int arr[4]; int arr[4];
}; };
struct tint_array_wrapper_2 { struct tint_array_wrapper_2 {
tint_array_wrapper arr[3]; tint_array_wrapper arr[3];
}; };
struct tint_array_wrapper_1 { struct tint_array_wrapper_1 {
tint_array_wrapper_2 arr[2]; tint_array_wrapper_2 arr[2];
}; };
struct tint_array_wrapper_3 { struct tint_array_wrapper_3 {
tint_array_wrapper arr[2]; tint_array_wrapper arr[2];
}; };

View File

@ -15,6 +15,7 @@ inline vec<T, N> operator*(packed_vec<T, M> lhs, matrix<T, N, M> rhs) {
struct tint_array_wrapper { struct tint_array_wrapper {
/* 0x0000 */ int4 arr[4]; /* 0x0000 */ int4 arr[4];
}; };
struct Inner { struct Inner {
/* 0x0000 */ packed_int3 a; /* 0x0000 */ packed_int3 a;
/* 0x000c */ int b; /* 0x000c */ int b;
@ -27,6 +28,7 @@ struct Inner {
/* 0x0068 */ int8_t tint_pad[8]; /* 0x0068 */ int8_t tint_pad[8];
/* 0x0070 */ tint_array_wrapper i; /* 0x0070 */ tint_array_wrapper i;
}; };
struct S { struct S {
/* 0x0000 */ Inner arr[1]; /* 0x0000 */ Inner arr[1];
}; };

View File

@ -15,6 +15,7 @@ inline vec<T, N> operator*(packed_vec<T, M> lhs, matrix<T, N, M> rhs) {
struct tint_array_wrapper { struct tint_array_wrapper {
/* 0x0000 */ int4 arr[4]; /* 0x0000 */ int4 arr[4];
}; };
struct Inner { struct Inner {
/* 0x0000 */ packed_int3 a; /* 0x0000 */ packed_int3 a;
/* 0x000c */ int b; /* 0x000c */ int b;
@ -27,6 +28,7 @@ struct Inner {
/* 0x0068 */ int8_t tint_pad[8]; /* 0x0068 */ int8_t tint_pad[8];
/* 0x0070 */ tint_array_wrapper i; /* 0x0070 */ tint_array_wrapper i;
}; };
struct S { struct S {
/* 0x0000 */ Inner arr[1]; /* 0x0000 */ Inner arr[1];
}; };

View File

@ -15,9 +15,11 @@ inline vec<T, N> operator*(packed_vec<T, M> lhs, matrix<T, N, M> rhs) {
struct Inner { struct Inner {
/* 0x0000 */ int x; /* 0x0000 */ int x;
}; };
struct tint_array_wrapper { struct tint_array_wrapper {
/* 0x0000 */ Inner arr[4]; /* 0x0000 */ Inner arr[4];
}; };
struct S { struct S {
/* 0x0000 */ packed_int3 a; /* 0x0000 */ packed_int3 a;
/* 0x000c */ int b; /* 0x000c */ int b;

View File

@ -15,9 +15,11 @@ inline vec<T, N> operator*(packed_vec<T, M> lhs, matrix<T, N, M> rhs) {
struct Inner { struct Inner {
/* 0x0000 */ int x; /* 0x0000 */ int x;
}; };
struct tint_array_wrapper { struct tint_array_wrapper {
/* 0x0000 */ Inner arr[4]; /* 0x0000 */ Inner arr[4];
}; };
struct S { struct S {
/* 0x0000 */ packed_int3 a; /* 0x0000 */ packed_int3 a;
/* 0x000c */ int b; /* 0x000c */ int b;

View File

@ -4,9 +4,11 @@ using namespace metal;
struct S { struct S {
/* 0x0000 */ float f; /* 0x0000 */ float f;
}; };
struct tint_symbol_2 { struct tint_symbol_2 {
/* 0x0000 */ S arr[1]; /* 0x0000 */ S arr[1];
}; };
struct tint_symbol_4 { struct tint_symbol_4 {
/* 0x0000 */ S arr[1]; /* 0x0000 */ S arr[1];
}; };

View File

@ -4,6 +4,7 @@ using namespace metal;
struct Inner { struct Inner {
/* 0x0000 */ float f; /* 0x0000 */ float f;
}; };
struct S { struct S {
/* 0x0000 */ Inner inner; /* 0x0000 */ Inner inner;
}; };

View File

@ -15,6 +15,7 @@ inline vec<T, N> operator*(packed_vec<T, M> lhs, matrix<T, N, M> rhs) {
struct tint_array_wrapper { struct tint_array_wrapper {
/* 0x0000 */ int4 arr[4]; /* 0x0000 */ int4 arr[4];
}; };
struct Inner { struct Inner {
/* 0x0000 */ packed_int3 a; /* 0x0000 */ packed_int3 a;
/* 0x000c */ int b; /* 0x000c */ int b;
@ -29,9 +30,11 @@ struct Inner {
/* 0x0078 */ int8_t tint_pad[8]; /* 0x0078 */ int8_t tint_pad[8];
/* 0x0080 */ tint_array_wrapper k; /* 0x0080 */ tint_array_wrapper k;
}; };
struct tint_array_wrapper_1 { struct tint_array_wrapper_1 {
/* 0x0000 */ Inner arr[8]; /* 0x0000 */ Inner arr[8];
}; };
struct S { struct S {
/* 0x0000 */ tint_array_wrapper_1 arr; /* 0x0000 */ tint_array_wrapper_1 arr;
}; };

View File

@ -16,9 +16,11 @@ struct Inner {
/* 0x0000 */ int x; /* 0x0000 */ int x;
/* 0x0004 */ int8_t tint_pad[12]; /* 0x0004 */ int8_t tint_pad[12];
}; };
struct tint_array_wrapper { struct tint_array_wrapper {
/* 0x0000 */ Inner arr[4]; /* 0x0000 */ Inner arr[4];
}; };
struct S { struct S {
/* 0x0000 */ packed_int3 a; /* 0x0000 */ packed_int3 a;
/* 0x000c */ int b; /* 0x000c */ int b;

View File

@ -4,6 +4,7 @@ using namespace metal;
struct Inner { struct Inner {
/* 0x0000 */ float f; /* 0x0000 */ float f;
}; };
struct S { struct S {
/* 0x0000 */ Inner inner; /* 0x0000 */ Inner inner;
}; };

View File

@ -2,3 +2,4 @@
using namespace metal; using namespace metal;
constant int H = 1; constant int H = 1;

View File

@ -5,16 +5,19 @@ struct VertexInputs0 {
uint vertex_index; uint vertex_index;
int loc0; int loc0;
}; };
struct VertexInputs1 { struct VertexInputs1 {
uint loc1; uint loc1;
float4 loc3; float4 loc3;
}; };
struct tint_symbol_2 { struct tint_symbol_2 {
int loc0 [[attribute(0)]]; int loc0 [[attribute(0)]];
uint loc1 [[attribute(1)]]; uint loc1 [[attribute(1)]];
uint loc1_1 [[attribute(2)]]; uint loc1_1 [[attribute(2)]];
float4 loc3 [[attribute(3)]]; float4 loc3 [[attribute(3)]];
}; };
struct tint_symbol_3 { struct tint_symbol_3 {
float4 value [[position]]; float4 value [[position]];
}; };

View File

@ -32,6 +32,14 @@ inline vec<T, N> operator*(packed_vec<T, M> lhs, matrix<T, N, M> rhs) {
return vec<T, M>(lhs) * rhs; return vec<T, M>(lhs) * rhs;
} }
void marg8uintin() {
isnormal(4.0f);
isnormal(float4());
isnormal(0.0f);
isnormal(4.0f);
isnormal(2.0f);
}
struct Uniforms { struct Uniforms {
/* 0x0000 */ uint numTriangles; /* 0x0000 */ uint numTriangles;
/* 0x0004 */ uint gridSize; /* 0x0004 */ uint gridSize;
@ -42,6 +50,7 @@ struct Uniforms {
/* 0x0020 */ packed_float3 bbMax; /* 0x0020 */ packed_float3 bbMax;
/* 0x002c */ int8_t tint_pad_1[4]; /* 0x002c */ int8_t tint_pad_1[4];
}; };
struct Dbg { struct Dbg {
/* 0x0000 */ atomic_uint offsetCounter; /* 0x0000 */ atomic_uint offsetCounter;
/* 0x0004 */ uint pad0; /* 0x0004 */ uint pad0;
@ -56,30 +65,27 @@ struct Dbg {
/* 0x0028 */ float value_f32_2; /* 0x0028 */ float value_f32_2;
/* 0x002c */ float value_f32_3; /* 0x002c */ float value_f32_3;
}; };
struct F32s { struct F32s {
/* 0x0000 */ float values[1]; /* 0x0000 */ float values[1];
}; };
struct U32s { struct U32s {
/* 0x0000 */ uint values[1]; /* 0x0000 */ uint values[1];
}; };
struct I32s { struct I32s {
int values[1]; int values[1];
}; };
struct AU32s { struct AU32s {
/* 0x0000 */ atomic_uint values[1]; /* 0x0000 */ atomic_uint values[1];
}; };
struct AI32s { struct AI32s {
/* 0x0000 */ atomic_int values[1]; /* 0x0000 */ atomic_int values[1];
}; };
void marg8uintin() {
isnormal(4.0f);
isnormal(float4());
isnormal(0.0f);
isnormal(4.0f);
isnormal(2.0f);
}
float3 toVoxelPos(float3 position, const constant Uniforms* const tint_symbol) { float3 toVoxelPos(float3 position, const constant Uniforms* const tint_symbol) {
float3 bbMin = float3((*(tint_symbol)).bbMin[0], (*(tint_symbol)).bbMin[1], (*(tint_symbol)).bbMin[2]); float3 bbMin = float3((*(tint_symbol)).bbMin[0], (*(tint_symbol)).bbMin[1], (*(tint_symbol)).bbMin[2]);
float3 bbMax = float3((*(tint_symbol)).bbMax[0], (*(tint_symbol)).bbMax[1], (*(tint_symbol)).bbMax[2]); float3 bbMax = float3((*(tint_symbol)).bbMax[0], (*(tint_symbol)).bbMax[1], (*(tint_symbol)).bbMax[2]);

View File

@ -4,6 +4,7 @@ using namespace metal;
struct A { struct A {
int a; int a;
}; };
struct B { struct B {
int b; int b;
}; };

View File

@ -4,6 +4,7 @@ using namespace metal;
struct tint_symbol_1 { struct tint_symbol_1 {
/* 0x0000 */ uint4 buffer_size[1]; /* 0x0000 */ uint4 buffer_size[1];
}; };
struct S { struct S {
float f; float f;
}; };

View File

@ -5,23 +5,20 @@ struct Uniforms {
/* 0x0000 */ float2 u_scale; /* 0x0000 */ float2 u_scale;
/* 0x0008 */ float2 u_offset; /* 0x0008 */ float2 u_offset;
}; };
struct VertexOutputs { struct VertexOutputs {
float2 texcoords; float2 texcoords;
float4 position; float4 position;
}; };
struct tint_symbol { struct tint_symbol {
float2 texcoords [[user(locn0)]]; float2 texcoords [[user(locn0)]];
float4 position [[position]]; float4 position [[position]];
}; };
struct tint_array_wrapper { struct tint_array_wrapper {
float2 arr[3]; float2 arr[3];
}; };
struct tint_symbol_2 {
float2 texcoord [[user(locn0)]];
};
struct tint_symbol_3 {
float4 value [[color(0)]];
};
VertexOutputs vs_main_inner(uint VertexIndex, const constant Uniforms* const tint_symbol_4) { VertexOutputs vs_main_inner(uint VertexIndex, const constant Uniforms* const tint_symbol_4) {
tint_array_wrapper texcoord = {.arr={float2(-0.5f, 0.0f), float2(1.5f, 0.0f), float2(0.5f, 2.0f)}}; tint_array_wrapper texcoord = {.arr={float2(-0.5f, 0.0f), float2(1.5f, 0.0f), float2(0.5f, 2.0f)}};
@ -44,6 +41,14 @@ vertex tint_symbol vs_main(const constant Uniforms* tint_symbol_5 [[buffer(0)]],
return wrapper_result; return wrapper_result;
} }
struct tint_symbol_2 {
float2 texcoord [[user(locn0)]];
};
struct tint_symbol_3 {
float4 value [[color(0)]];
};
float4 fs_main_inner(float2 texcoord, texture2d<float, access::sample> tint_symbol_6, sampler tint_symbol_7) { float4 fs_main_inner(float2 texcoord, texture2d<float, access::sample> tint_symbol_6, sampler tint_symbol_7) {
float2 clampedTexcoord = clamp(texcoord, float2(0.0f, 0.0f), float2(1.0f, 1.0f)); float2 clampedTexcoord = clamp(texcoord, float2(0.0f, 0.0f), float2(1.0f, 1.0f));
if (!(all((clampedTexcoord == texcoord)))) { if (!(all((clampedTexcoord == texcoord)))) {

View File

@ -4,12 +4,15 @@ using namespace metal;
struct UBO { struct UBO {
/* 0x0000 */ int dynamic_idx; /* 0x0000 */ int dynamic_idx;
}; };
struct tint_array_wrapper { struct tint_array_wrapper {
int arr[64]; int arr[64];
}; };
struct S { struct S {
tint_array_wrapper data; tint_array_wrapper data;
}; };
struct Result { struct Result {
/* 0x0000 */ int out; /* 0x0000 */ int out;
}; };

View File

@ -4,12 +4,15 @@ using namespace metal;
struct UBO { struct UBO {
/* 0x0000 */ int dynamic_idx; /* 0x0000 */ int dynamic_idx;
}; };
struct tint_array_wrapper { struct tint_array_wrapper {
int arr[64]; int arr[64];
}; };
struct S { struct S {
tint_array_wrapper data; tint_array_wrapper data;
}; };
struct Result { struct Result {
/* 0x0000 */ int out; /* 0x0000 */ int out;
}; };

View File

@ -4,12 +4,15 @@ using namespace metal;
struct UBO { struct UBO {
/* 0x0000 */ int dynamic_idx; /* 0x0000 */ int dynamic_idx;
}; };
struct Result { struct Result {
/* 0x0000 */ int out; /* 0x0000 */ int out;
}; };
struct tint_array_wrapper { struct tint_array_wrapper {
/* 0x0000 */ int arr[4]; /* 0x0000 */ int arr[4];
}; };
struct SSBO { struct SSBO {
/* 0x0000 */ tint_array_wrapper data; /* 0x0000 */ tint_array_wrapper data;
}; };

View File

@ -4,11 +4,13 @@ using namespace metal;
struct tint_array_wrapper { struct tint_array_wrapper {
/* 0x0000 */ int4 arr[4]; /* 0x0000 */ int4 arr[4];
}; };
struct UBO { struct UBO {
/* 0x0000 */ tint_array_wrapper data; /* 0x0000 */ tint_array_wrapper data;
/* 0x0040 */ int dynamic_idx; /* 0x0040 */ int dynamic_idx;
/* 0x0044 */ int8_t tint_pad[12]; /* 0x0044 */ int8_t tint_pad[12];
}; };
struct Result { struct Result {
/* 0x0000 */ int out; /* 0x0000 */ int out;
}; };

View File

@ -4,12 +4,15 @@ using namespace metal;
struct UBO { struct UBO {
/* 0x0000 */ int dynamic_idx; /* 0x0000 */ int dynamic_idx;
}; };
struct tint_array_wrapper { struct tint_array_wrapper {
int arr[64]; int arr[64];
}; };
struct S { struct S {
tint_array_wrapper data; tint_array_wrapper data;
}; };
struct Result { struct Result {
/* 0x0000 */ int out; /* 0x0000 */ int out;
}; };

View File

@ -4,12 +4,15 @@ using namespace metal;
struct UBO { struct UBO {
/* 0x0000 */ int dynamic_idx; /* 0x0000 */ int dynamic_idx;
}; };
struct tint_array_wrapper { struct tint_array_wrapper {
int arr[64]; int arr[64];
}; };
struct S { struct S {
tint_array_wrapper data; tint_array_wrapper data;
}; };
struct Result { struct Result {
/* 0x0000 */ int out; /* 0x0000 */ int out;
}; };

View File

@ -4,12 +4,15 @@ using namespace metal;
struct UBO { struct UBO {
/* 0x0000 */ int dynamic_idx; /* 0x0000 */ int dynamic_idx;
}; };
struct tint_array_wrapper { struct tint_array_wrapper {
int arr[64]; int arr[64];
}; };
struct S { struct S {
tint_array_wrapper data; tint_array_wrapper data;
}; };
struct Result { struct Result {
/* 0x0000 */ int out; /* 0x0000 */ int out;
}; };

View File

@ -4,12 +4,15 @@ using namespace metal;
struct UBO { struct UBO {
/* 0x0000 */ int dynamic_idx; /* 0x0000 */ int dynamic_idx;
}; };
struct tint_array_wrapper { struct tint_array_wrapper {
int arr[64]; int arr[64];
}; };
struct S { struct S {
tint_array_wrapper data; tint_array_wrapper data;
}; };
struct Result { struct Result {
/* 0x0000 */ int out; /* 0x0000 */ int out;
}; };

View File

@ -4,12 +4,15 @@ using namespace metal;
struct UBO { struct UBO {
/* 0x0000 */ int dynamic_idx; /* 0x0000 */ int dynamic_idx;
}; };
struct tint_array_wrapper { struct tint_array_wrapper {
int arr[64]; int arr[64];
}; };
struct S { struct S {
tint_array_wrapper data; tint_array_wrapper data;
}; };
struct Result { struct Result {
/* 0x0000 */ int out; /* 0x0000 */ int out;
}; };

View File

@ -4,12 +4,15 @@ using namespace metal;
struct UBO { struct UBO {
/* 0x0000 */ int dynamic_idx; /* 0x0000 */ int dynamic_idx;
}; };
struct Result { struct Result {
/* 0x0000 */ int out; /* 0x0000 */ int out;
}; };
struct tint_array_wrapper { struct tint_array_wrapper {
/* 0x0000 */ int arr[4]; /* 0x0000 */ int arr[4];
}; };
struct SSBO { struct SSBO {
/* 0x0000 */ tint_array_wrapper data; /* 0x0000 */ tint_array_wrapper data;
}; };

View File

@ -4,12 +4,15 @@ using namespace metal;
struct UBO { struct UBO {
/* 0x0000 */ int dynamic_idx; /* 0x0000 */ int dynamic_idx;
}; };
struct tint_array_wrapper { struct tint_array_wrapper {
int arr[64]; int arr[64];
}; };
struct S { struct S {
tint_array_wrapper data; tint_array_wrapper data;
}; };
struct Result { struct Result {
/* 0x0000 */ int out; /* 0x0000 */ int out;
}; };

View File

@ -4,6 +4,7 @@ using namespace metal;
struct tint_symbol_2 { struct tint_symbol_2 {
float2 vUV [[user(locn0)]]; float2 vUV [[user(locn0)]];
}; };
struct tint_symbol_3 { struct tint_symbol_3 {
float4 value [[color(0)]]; float4 value [[color(0)]];
}; };

View File

@ -15,9 +15,11 @@ inline vec<T, N> operator*(packed_vec<T, M> lhs, matrix<T, N, M> rhs) {
struct Simulation { struct Simulation {
/* 0x0000 */ uint i; /* 0x0000 */ uint i;
}; };
struct tint_array_wrapper { struct tint_array_wrapper {
/* 0x0000 */ float3 arr[8]; /* 0x0000 */ float3 arr[8];
}; };
struct Particle { struct Particle {
/* 0x0000 */ tint_array_wrapper position; /* 0x0000 */ tint_array_wrapper position;
/* 0x0080 */ float lifetime; /* 0x0080 */ float lifetime;
@ -26,6 +28,7 @@ struct Particle {
/* 0x00a0 */ packed_float3 velocity; /* 0x00a0 */ packed_float3 velocity;
/* 0x00ac */ int8_t tint_pad_1[4]; /* 0x00ac */ int8_t tint_pad_1[4];
}; };
struct Particles { struct Particles {
/* 0x0000 */ Particle p[1]; /* 0x0000 */ Particle p[1];
}; };

View File

@ -4,9 +4,11 @@ using namespace metal;
struct PointLight { struct PointLight {
float4 position; float4 position;
}; };
struct PointLights { struct PointLights {
PointLight values[1]; PointLight values[1];
}; };
struct Uniforms { struct Uniforms {
/* 0x0000 */ float4x4 worldView; /* 0x0000 */ float4x4 worldView;
/* 0x0040 */ float4x4 proj; /* 0x0040 */ float4x4 proj;
@ -15,6 +17,7 @@ struct Uniforms {
/* 0x0088 */ int8_t tint_pad[8]; /* 0x0088 */ int8_t tint_pad[8];
/* 0x0090 */ float4 color; /* 0x0090 */ float4 color;
}; };
struct FragmentInput { struct FragmentInput {
float4 position; float4 position;
float4 view_position; float4 view_position;
@ -22,18 +25,10 @@ struct FragmentInput {
float2 uv; float2 uv;
float4 color; float4 color;
}; };
struct FragmentOutput { struct FragmentOutput {
float4 color; float4 color;
}; };
struct tint_symbol_3 {
float4 view_position [[user(locn0)]];
float4 normal [[user(locn1)]];
float2 uv [[user(locn2)]];
float4 color [[user(locn3)]];
};
struct tint_symbol_4 {
float4 color [[color(0)]];
};
float4 getColor(FragmentInput tint_symbol, const constant Uniforms* const tint_symbol_6, texture2d<float, access::sample> tint_symbol_7, sampler tint_symbol_8) { float4 getColor(FragmentInput tint_symbol, const constant Uniforms* const tint_symbol_6, texture2d<float, access::sample> tint_symbol_7, sampler tint_symbol_8) {
float4 color = 0.0f; float4 color = 0.0f;
@ -56,6 +51,17 @@ float4 getColor(FragmentInput tint_symbol, const constant Uniforms* const tint_s
return color; return color;
} }
struct tint_symbol_3 {
float4 view_position [[user(locn0)]];
float4 normal [[user(locn1)]];
float2 uv [[user(locn2)]];
float4 color [[user(locn3)]];
};
struct tint_symbol_4 {
float4 color [[color(0)]];
};
FragmentOutput tint_symbol_1_inner(FragmentInput tint_symbol) { FragmentOutput tint_symbol_1_inner(FragmentInput tint_symbol) {
FragmentOutput output = {}; FragmentOutput output = {};
output.color = float4(1.0f, 0.0f, 0.0f, 1.0f); output.color = float4(1.0f, 0.0f, 0.0f, 1.0f);

View File

@ -5,10 +5,12 @@ struct FragIn {
float a; float a;
uint mask; uint mask;
}; };
struct tint_symbol_2 { struct tint_symbol_2 {
float a [[user(locn0)]]; float a [[user(locn0)]];
float b [[user(locn1)]]; float b [[user(locn1)]];
}; };
struct tint_symbol_3 { struct tint_symbol_3 {
float a [[color(0)]]; float a [[color(0)]];
uint mask [[sample_mask]]; uint mask [[sample_mask]];

View File

@ -1,13 +1,6 @@
#include <metal_stdlib> #include <metal_stdlib>
using namespace metal; using namespace metal;
struct tint_symbol_2 {
int3 x [[user(locn1)]] [[flat]];
};
struct tint_symbol_3 {
int value [[color(2)]];
};
int f(int x) { int f(int x) {
if ((x == 10)) { if ((x == 10)) {
discard_fragment(); discard_fragment();
@ -15,6 +8,14 @@ int f(int x) {
return x; return x;
} }
struct tint_symbol_2 {
int3 x [[user(locn1)]] [[flat]];
};
struct tint_symbol_3 {
int value [[color(2)]];
};
int tint_symbol_inner(int3 x) { int tint_symbol_inner(int3 x) {
int y = x[0]; int y = x[0];
while (true) { while (true) {

View File

@ -4,13 +4,16 @@ using namespace metal;
struct tint_array_wrapper { struct tint_array_wrapper {
/* 0x0000 */ float4x4 arr[2]; /* 0x0000 */ float4x4 arr[2];
}; };
struct strided_arr { struct strided_arr {
/* 0x0000 */ float el; /* 0x0000 */ float el;
/* 0x0004 */ int8_t tint_pad[12]; /* 0x0004 */ int8_t tint_pad[12];
}; };
struct tint_array_wrapper_1 { struct tint_array_wrapper_1 {
/* 0x0000 */ strided_arr arr[4]; /* 0x0000 */ strided_arr arr[4];
}; };
struct LeftOver { struct LeftOver {
/* 0x0000 */ float4x4 worldViewProjection; /* 0x0000 */ float4x4 worldViewProjection;
/* 0x0040 */ float time; /* 0x0040 */ float time;
@ -18,19 +21,6 @@ struct LeftOver {
/* 0x0050 */ tint_array_wrapper test2; /* 0x0050 */ tint_array_wrapper test2;
/* 0x00d0 */ tint_array_wrapper_1 test; /* 0x00d0 */ tint_array_wrapper_1 test;
}; };
struct main_out {
float4 gl_Position;
float2 vUV_1;
};
struct tint_symbol_2 {
float3 position_param [[attribute(0)]];
float3 normal_param [[attribute(1)]];
float2 uv_param [[attribute(2)]];
};
struct tint_symbol_3 {
float2 vUV_1 [[user(locn0)]];
float4 gl_Position [[position]];
};
void main_1(thread float3* const tint_symbol_5, const constant LeftOver* const tint_symbol_6, thread float4* const tint_symbol_7, thread float2* const tint_symbol_8, thread float2* const tint_symbol_9) { void main_1(thread float3* const tint_symbol_5, const constant LeftOver* const tint_symbol_6, thread float4* const tint_symbol_7, thread float2* const tint_symbol_8, thread float2* const tint_symbol_9) {
float4 q = 0.0f; float4 q = 0.0f;
@ -57,6 +47,22 @@ void main_1(thread float3* const tint_symbol_5, const constant LeftOver* const t
return; return;
} }
struct main_out {
float4 gl_Position;
float2 vUV_1;
};
struct tint_symbol_2 {
float3 position_param [[attribute(0)]];
float3 normal_param [[attribute(1)]];
float2 uv_param [[attribute(2)]];
};
struct tint_symbol_3 {
float2 vUV_1 [[user(locn0)]];
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, 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) {
*(tint_symbol_10) = position_param; *(tint_symbol_10) = position_param;
*(tint_symbol_11) = uv_param; *(tint_symbol_11) = uv_param;

View File

@ -22,6 +22,7 @@ struct Uniforms {
/* 0x0020 */ packed_float3 bbMax; /* 0x0020 */ packed_float3 bbMax;
/* 0x002c */ int8_t tint_pad_1[4]; /* 0x002c */ int8_t tint_pad_1[4];
}; };
struct Dbg { struct Dbg {
/* 0x0000 */ atomic_uint offsetCounter; /* 0x0000 */ atomic_uint offsetCounter;
/* 0x0004 */ uint pad0; /* 0x0004 */ uint pad0;
@ -36,18 +37,23 @@ struct Dbg {
/* 0x0028 */ float value_f32_2; /* 0x0028 */ float value_f32_2;
/* 0x002c */ float value_f32_3; /* 0x002c */ float value_f32_3;
}; };
struct F32s { struct F32s {
/* 0x0000 */ float values[1]; /* 0x0000 */ float values[1];
}; };
struct U32s { struct U32s {
/* 0x0000 */ uint values[1]; /* 0x0000 */ uint values[1];
}; };
struct I32s { struct I32s {
int values[1]; int values[1];
}; };
struct AU32s { struct AU32s {
/* 0x0000 */ atomic_uint values[1]; /* 0x0000 */ atomic_uint values[1];
}; };
struct AI32s { struct AI32s {
/* 0x0000 */ atomic_int values[1]; /* 0x0000 */ atomic_int values[1];
}; };

View File

@ -17,22 +17,28 @@ struct LightData {
/* 0x0010 */ packed_float3 color; /* 0x0010 */ packed_float3 color;
/* 0x001c */ float radius; /* 0x001c */ float radius;
}; };
struct LightsBuffer { struct LightsBuffer {
/* 0x0000 */ LightData lights[1]; /* 0x0000 */ LightData lights[1];
}; };
struct tint_array_wrapper { struct tint_array_wrapper {
/* 0x0000 */ uint arr[64]; /* 0x0000 */ uint arr[64];
}; };
struct TileLightIdData { struct TileLightIdData {
/* 0x0000 */ atomic_uint count; /* 0x0000 */ atomic_uint count;
/* 0x0004 */ tint_array_wrapper lightId; /* 0x0004 */ tint_array_wrapper lightId;
}; };
struct tint_array_wrapper_1 { struct tint_array_wrapper_1 {
/* 0x0000 */ TileLightIdData arr[4]; /* 0x0000 */ TileLightIdData arr[4];
}; };
struct Tiles { struct Tiles {
/* 0x0000 */ tint_array_wrapper_1 data; /* 0x0000 */ tint_array_wrapper_1 data;
}; };
struct Config { struct Config {
/* 0x0000 */ uint numLights; /* 0x0000 */ uint numLights;
/* 0x0004 */ uint numTiles; /* 0x0004 */ uint numTiles;
@ -41,6 +47,7 @@ struct Config {
/* 0x0010 */ uint numTileLightSlot; /* 0x0010 */ uint numTileLightSlot;
/* 0x0014 */ uint tileSize; /* 0x0014 */ uint tileSize;
}; };
struct Uniforms { struct Uniforms {
/* 0x0000 */ float4 min; /* 0x0000 */ float4 min;
/* 0x0010 */ float4 max; /* 0x0010 */ float4 max;
@ -48,6 +55,7 @@ struct Uniforms {
/* 0x0060 */ float4x4 projectionMatrix; /* 0x0060 */ float4x4 projectionMatrix;
/* 0x00a0 */ float4 fullScreenSize; /* 0x00a0 */ float4 fullScreenSize;
}; };
struct tint_array_wrapper_2 { struct tint_array_wrapper_2 {
float4 arr[6]; float4 arr[6];
}; };

View File

@ -1,14 +1,14 @@
#include <metal_stdlib> #include <metal_stdlib>
using namespace metal; using namespace metal;
struct tint_array_wrapper {
float arr[4];
};
int foo() { int foo() {
return 1; return 1;
} }
struct tint_array_wrapper {
float arr[4];
};
fragment void tint_symbol() { fragment void tint_symbol() {
tint_array_wrapper arr = {.arr={}}; tint_array_wrapper arr = {.arr={}};
int const a_save = foo(); int const a_save = foo();

View File

@ -4,6 +4,7 @@ using namespace metal;
struct tint_array_wrapper { struct tint_array_wrapper {
/* 0x0000 */ uint arr[50]; /* 0x0000 */ uint arr[50];
}; };
struct Buf { struct Buf {
/* 0x0000 */ uint count; /* 0x0000 */ uint count;
/* 0x0004 */ tint_array_wrapper data; /* 0x0004 */ tint_array_wrapper data;

View File

@ -5,6 +5,7 @@ struct Light {
float3 position; float3 position;
float3 colour; float3 colour;
}; };
struct Lights { struct Lights {
Light light[1]; Light light[1];
}; };

View File

@ -4,12 +4,15 @@ using namespace metal;
struct vertexUniformBuffer1 { struct vertexUniformBuffer1 {
/* 0x0000 */ float2x2 transform1; /* 0x0000 */ float2x2 transform1;
}; };
struct vertexUniformBuffer2 { struct vertexUniformBuffer2 {
/* 0x0000 */ float2x2 transform2; /* 0x0000 */ float2x2 transform2;
}; };
struct tint_symbol_1 { struct tint_symbol_1 {
float4 value [[position]]; float4 value [[position]];
}; };
struct tint_array_wrapper { struct tint_array_wrapper {
float2 arr[3]; float2 arr[3];
}; };

View File

@ -7,6 +7,7 @@ struct Uniforms {
/* 0x0008 */ uint isRGB10A2Unorm; /* 0x0008 */ uint isRGB10A2Unorm;
/* 0x000c */ uint channelCount; /* 0x000c */ uint channelCount;
}; };
struct OutputBuf { struct OutputBuf {
/* 0x0000 */ uint result[1]; /* 0x0000 */ uint result[1];
}; };

View File

@ -6,6 +6,7 @@ struct Uniforms {
/* 0x0008 */ uint2 bShape; /* 0x0008 */ uint2 bShape;
/* 0x0010 */ uint2 outShape; /* 0x0010 */ uint2 outShape;
}; };
struct Matrix { struct Matrix {
/* 0x0000 */ uint numbers[1]; /* 0x0000 */ uint numbers[1];
}; };

View File

@ -4,18 +4,14 @@ using namespace metal;
struct tint_array_wrapper { struct tint_array_wrapper {
int arr[10]; int arr[10];
}; };
struct QuicksortObject { struct QuicksortObject {
tint_array_wrapper numbers; tint_array_wrapper numbers;
}; };
struct buf0 { struct buf0 {
/* 0x0000 */ float2 resolution; /* 0x0000 */ float2 resolution;
}; };
struct main_out {
float4 x_GLF_color_1;
};
struct tint_symbol_1 {
float4 x_GLF_color_1 [[color(0)]];
};
void swap_i1_i1_(thread int* const i, thread int* const j, thread QuicksortObject* const tint_symbol_81) { void swap_i1_i1_(thread int* const i, thread int* const j, thread QuicksortObject* const tint_symbol_81) {
int temp = 0; int temp = 0;
@ -1547,6 +1543,14 @@ void main_1(thread QuicksortObject* const tint_symbol_84, thread float4* const t
return; return;
} }
struct main_out {
float4 x_GLF_color_1;
};
struct tint_symbol_1 {
float4 x_GLF_color_1 [[color(0)]];
};
main_out tint_symbol_inner(float4 gl_FragCoord_param, thread float4* const tint_symbol_88, thread QuicksortObject* const tint_symbol_89, const constant buf0* const tint_symbol_90, thread float4* const tint_symbol_91) { main_out tint_symbol_inner(float4 gl_FragCoord_param, thread float4* const tint_symbol_88, thread QuicksortObject* const tint_symbol_89, const constant buf0* const tint_symbol_90, thread float4* const tint_symbol_91) {
*(tint_symbol_88) = gl_FragCoord_param; *(tint_symbol_88) = gl_FragCoord_param;
main_1(tint_symbol_89, tint_symbol_88, tint_symbol_90, tint_symbol_91); main_1(tint_symbol_89, tint_symbol_88, tint_symbol_90, tint_symbol_91);

View File

@ -4,6 +4,7 @@ using namespace metal;
struct Constants { struct Constants {
int level; int level;
}; };
struct Result { struct Result {
/* 0x0000 */ float values[1]; /* 0x0000 */ float values[1];
}; };

View File

@ -5,13 +5,16 @@ struct Output {
float4 Position; float4 Position;
float4 color; float4 color;
}; };
struct tint_symbol_1 { struct tint_symbol_1 {
float4 color [[user(locn0)]]; float4 color [[user(locn0)]];
float4 Position [[position]]; float4 Position [[position]];
}; };
struct tint_array_wrapper { struct tint_array_wrapper {
float2 arr[4]; float2 arr[4];
}; };
struct tint_array_wrapper_1 { struct tint_array_wrapper_1 {
float4 arr[4]; float4 arr[4];
}; };

View File

@ -6,6 +6,7 @@ struct Result {
}; };
constant uint width = 128u; constant uint width = 128u;
void tint_symbol_inner(uint3 GlobalInvocationId, device Result* const tint_symbol_1, depth2d<float, access::sample> tint_symbol_2) { void tint_symbol_inner(uint3 GlobalInvocationId, device Result* const tint_symbol_1, depth2d<float, access::sample> tint_symbol_2) {
(*(tint_symbol_1)).values[((GlobalInvocationId[1] * width) + GlobalInvocationId[0])] = tint_symbol_2.read(uint2(int2(int(GlobalInvocationId[0]), int(GlobalInvocationId[1]))), 0); (*(tint_symbol_1)).values[((GlobalInvocationId[1] * width) + GlobalInvocationId[0])] = tint_symbol_2.read(uint2(int2(int(GlobalInvocationId[0]), int(GlobalInvocationId[1]))), 0);
} }

View File

@ -4,12 +4,14 @@ using namespace metal;
struct tint_array_wrapper { struct tint_array_wrapper {
/* 0x0000 */ int arr[6]; /* 0x0000 */ int arr[6];
}; };
struct sspp962805860buildInformationS { struct sspp962805860buildInformationS {
/* 0x0000 */ float4 footprint; /* 0x0000 */ float4 footprint;
/* 0x0010 */ float4 offset; /* 0x0010 */ float4 offset;
/* 0x0020 */ int essence; /* 0x0020 */ int essence;
/* 0x0024 */ tint_array_wrapper orientation; /* 0x0024 */ tint_array_wrapper orientation;
}; };
struct x_B4_BuildInformation { struct x_B4_BuildInformation {
/* 0x0000 */ sspp962805860buildInformationS passthru; /* 0x0000 */ sspp962805860buildInformationS passthru;
}; };

View File

@ -8,6 +8,7 @@ struct Uniforms {
/* 0x0010 */ uint2 dstCopyOrigin; /* 0x0010 */ uint2 dstCopyOrigin;
/* 0x0018 */ uint2 copySize; /* 0x0018 */ uint2 copySize;
}; };
struct OutputBuf { struct OutputBuf {
/* 0x0000 */ uint result[1]; /* 0x0000 */ uint result[1];
}; };

View File

@ -6,27 +6,11 @@ struct Uniforms {
/* 0x0004 */ uint dimInner; /* 0x0004 */ uint dimInner;
/* 0x0008 */ uint dimBOuter; /* 0x0008 */ uint dimBOuter;
}; };
struct Matrix { struct Matrix {
/* 0x0000 */ float numbers[1]; /* 0x0000 */ float numbers[1];
}; };
struct tint_array_wrapper_1 {
float arr[64];
};
struct tint_array_wrapper {
tint_array_wrapper_1 arr[64];
};
struct tint_array_wrapper_2 {
float arr[16];
};
struct tint_array_wrapper_3 {
float arr[4];
};
constant uint RowPerThread = 4u;
constant uint ColPerThread = 4u;
constant uint TileAOuter = 64u;
constant uint TileBOuter = 64u;
constant uint TileInner = 64u;
float mm_readA(uint row, uint col, const constant Uniforms* const tint_symbol_1, const device Matrix* const tint_symbol_2) { float mm_readA(uint row, uint col, const constant Uniforms* const tint_symbol_1, const device Matrix* const tint_symbol_2) {
if (((row < (*(tint_symbol_1)).dimAOuter) && (col < (*(tint_symbol_1)).dimInner))) { if (((row < (*(tint_symbol_1)).dimAOuter) && (col < (*(tint_symbol_1)).dimInner))) {
float const result = (*(tint_symbol_2)).numbers[((row * (*(tint_symbol_1)).dimInner) + col)]; float const result = (*(tint_symbol_2)).numbers[((row * (*(tint_symbol_1)).dimInner) + col)];
@ -50,6 +34,32 @@ void mm_write(uint row, uint col, float value, const constant Uniforms* const ti
} }
} }
constant uint RowPerThread = 4u;
constant uint ColPerThread = 4u;
constant uint TileAOuter = 64u;
constant uint TileBOuter = 64u;
constant uint TileInner = 64u;
struct tint_array_wrapper_1 {
float arr[64];
};
struct tint_array_wrapper {
tint_array_wrapper_1 arr[64];
};
struct tint_array_wrapper_2 {
float arr[16];
};
struct tint_array_wrapper_3 {
float arr[4];
};
void tint_symbol_inner(uint3 local_id, uint3 global_id, uint local_invocation_index, threadgroup tint_array_wrapper* const tint_symbol_7, threadgroup tint_array_wrapper* const tint_symbol_8, const constant Uniforms* const tint_symbol_9, const device Matrix* const tint_symbol_10, const device Matrix* const tint_symbol_11, device Matrix* const tint_symbol_12) { void tint_symbol_inner(uint3 local_id, uint3 global_id, uint local_invocation_index, threadgroup tint_array_wrapper* const tint_symbol_7, threadgroup tint_array_wrapper* const tint_symbol_8, const constant Uniforms* const tint_symbol_9, const device Matrix* const tint_symbol_10, const device Matrix* const tint_symbol_11, device Matrix* const tint_symbol_12) {
for(uint idx = local_invocation_index; (idx < 4096u); idx = (idx + 256u)) { for(uint idx = local_invocation_index; (idx < 4096u); idx = (idx + 256u)) {
uint const i = (idx / 64u); uint const i = (idx / 64u);

View File

@ -7,48 +7,44 @@ struct Mat4x4_ {
/* 0x0020 */ float4 mz; /* 0x0020 */ float4 mz;
/* 0x0030 */ float4 mw; /* 0x0030 */ float4 mw;
}; };
struct Mat4x3_ { struct Mat4x3_ {
/* 0x0000 */ float4 mx; /* 0x0000 */ float4 mx;
/* 0x0010 */ float4 my; /* 0x0010 */ float4 my;
/* 0x0020 */ float4 mz; /* 0x0020 */ float4 mz;
}; };
struct Mat4x2_ { struct Mat4x2_ {
/* 0x0000 */ float4 mx; /* 0x0000 */ float4 mx;
/* 0x0010 */ float4 my; /* 0x0010 */ float4 my;
}; };
struct ub_SceneParams { struct ub_SceneParams {
/* 0x0000 */ Mat4x4_ u_Projection; /* 0x0000 */ Mat4x4_ u_Projection;
}; };
struct tint_array_wrapper { struct tint_array_wrapper {
/* 0x0000 */ Mat4x2_ arr[1]; /* 0x0000 */ Mat4x2_ arr[1];
}; };
struct ub_MaterialParams { struct ub_MaterialParams {
/* 0x0000 */ tint_array_wrapper u_TexMtx; /* 0x0000 */ tint_array_wrapper u_TexMtx;
/* 0x0020 */ float4 u_Misc0_; /* 0x0020 */ float4 u_Misc0_;
}; };
struct tint_array_wrapper_1 { struct tint_array_wrapper_1 {
/* 0x0000 */ Mat4x3_ arr[32]; /* 0x0000 */ Mat4x3_ arr[32];
}; };
struct ub_PacketParams { struct ub_PacketParams {
/* 0x0000 */ tint_array_wrapper_1 u_PosMtx; /* 0x0000 */ tint_array_wrapper_1 u_PosMtx;
}; };
struct VertexOutput { struct VertexOutput {
float4 v_Color; float4 v_Color;
float2 v_TexCoord; float2 v_TexCoord;
float4 member; float4 member;
}; };
struct tint_symbol_2 {
float3 a_Position [[attribute(0)]];
float2 a_UV [[attribute(1)]];
float4 a_Color [[attribute(2)]];
float3 a_Normal [[attribute(3)]];
float a_PosMtxIdx [[attribute(4)]];
};
struct tint_symbol_3 {
float4 v_Color [[user(locn0)]];
float2 v_TexCoord [[user(locn1)]];
float4 member [[position]];
};
float3 Mat4x3GetCol0_(Mat4x3_ m) { float3 Mat4x3GetCol0_(Mat4x3_ m) {
Mat4x3_ m1 = {}; Mat4x3_ m1 = {};
@ -269,6 +265,20 @@ void main1(thread float* const tint_symbol_5, const constant ub_PacketParams* co
} }
} }
struct tint_symbol_2 {
float3 a_Position [[attribute(0)]];
float2 a_UV [[attribute(1)]];
float4 a_Color [[attribute(2)]];
float3 a_Normal [[attribute(3)]];
float a_PosMtxIdx [[attribute(4)]];
};
struct tint_symbol_3 {
float4 v_Color [[user(locn0)]];
float2 v_TexCoord [[user(locn1)]];
float4 member [[position]];
};
VertexOutput tint_symbol_inner(float3 a_Position, float2 a_UV, float4 a_Color, float3 a_Normal, float a_PosMtxIdx, thread float3* const tint_symbol_16, thread float2* const tint_symbol_17, thread float4* const tint_symbol_18, thread float3* const tint_symbol_19, thread float* const tint_symbol_20, const constant ub_PacketParams* const tint_symbol_21, const constant ub_SceneParams* const tint_symbol_22, thread float4* const tint_symbol_23, thread float4* const tint_symbol_24, const constant ub_MaterialParams* const tint_symbol_25, thread float2* const tint_symbol_26) { VertexOutput tint_symbol_inner(float3 a_Position, float2 a_UV, float4 a_Color, float3 a_Normal, float a_PosMtxIdx, thread float3* const tint_symbol_16, thread float2* const tint_symbol_17, thread float4* const tint_symbol_18, thread float3* const tint_symbol_19, thread float* const tint_symbol_20, const constant ub_PacketParams* const tint_symbol_21, const constant ub_SceneParams* const tint_symbol_22, thread float4* const tint_symbol_23, thread float4* const tint_symbol_24, const constant ub_MaterialParams* const tint_symbol_25, thread float2* const tint_symbol_26) {
*(tint_symbol_16) = a_Position; *(tint_symbol_16) = a_Position;
*(tint_symbol_17) = a_UV; *(tint_symbol_17) = a_UV;

View File

@ -5,12 +5,15 @@ struct Params {
/* 0x0000 */ uint filterDim; /* 0x0000 */ uint filterDim;
/* 0x0004 */ uint blockDim; /* 0x0004 */ uint blockDim;
}; };
struct Flip { struct Flip {
/* 0x0000 */ uint value; /* 0x0000 */ uint value;
}; };
struct tint_array_wrapper_1 { struct tint_array_wrapper_1 {
float3 arr[256]; float3 arr[256];
}; };
struct tint_array_wrapper { struct tint_array_wrapper {
tint_array_wrapper_1 arr[4]; tint_array_wrapper_1 arr[4];
}; };

View File

@ -12,30 +12,34 @@ struct Uniforms {
/* 0x003c */ int8_t tint_pad_3[4]; /* 0x003c */ int8_t tint_pad_3[4];
/* 0x0040 */ int2 outShapeStrides; /* 0x0040 */ int2 outShapeStrides;
}; };
struct ssbOut { struct ssbOut {
/* 0x0000 */ float result[1]; /* 0x0000 */ float result[1];
}; };
struct ssbA { struct ssbA {
/* 0x0000 */ float A[1]; /* 0x0000 */ float A[1];
}; };
struct ssbB { struct ssbB {
/* 0x0000 */ float B[1]; /* 0x0000 */ float B[1];
}; };
struct tint_array_wrapper_1 { struct tint_array_wrapper_1 {
float arr[64]; float arr[64];
}; };
struct tint_array_wrapper { struct tint_array_wrapper {
tint_array_wrapper_1 arr[64]; tint_array_wrapper_1 arr[64];
}; };
struct tint_array_wrapper_3 { struct tint_array_wrapper_3 {
float arr[1]; float arr[1];
}; };
struct tint_array_wrapper_2 { struct tint_array_wrapper_2 {
tint_array_wrapper_3 arr[64]; tint_array_wrapper_3 arr[64];
}; };
struct tint_array_wrapper_4 {
tint_array_wrapper_3 arr[1];
};
bool coordsInBounds_vi2_vi2_(thread int2* const coord, thread int2* const shape) { bool coordsInBounds_vi2_vi2_(thread int2* const coord, thread int2* const shape) {
bool x_87 = false; bool x_87 = false;
@ -168,6 +172,10 @@ void mm_write_i1_i1_f1_(thread int* const row_2, thread int* const col_2, thread
return; return;
} }
struct tint_array_wrapper_4 {
tint_array_wrapper_3 arr[1];
};
void mm_matMul_i1_i1_i1_(thread int* const dimAOuter, thread int* const dimInner, thread int* const dimBOuter, thread uint3* const tint_symbol_19, thread uint3* const tint_symbol_20, const constant Uniforms* const tint_symbol_21, thread int* const tint_symbol_22, thread int* const tint_symbol_23, thread int* const tint_symbol_24, const device ssbA* const tint_symbol_25, threadgroup tint_array_wrapper* const tint_symbol_26, thread int* const tint_symbol_27, const device ssbB* const tint_symbol_28, threadgroup tint_array_wrapper_2* const tint_symbol_29, device ssbOut* const tint_symbol_30) { void mm_matMul_i1_i1_i1_(thread int* const dimAOuter, thread int* const dimInner, thread int* const dimBOuter, thread uint3* const tint_symbol_19, thread uint3* const tint_symbol_20, const constant Uniforms* const tint_symbol_21, thread int* const tint_symbol_22, thread int* const tint_symbol_23, thread int* const tint_symbol_24, const device ssbA* const tint_symbol_25, threadgroup tint_array_wrapper* const tint_symbol_26, thread int* const tint_symbol_27, const device ssbB* const tint_symbol_28, threadgroup tint_array_wrapper_2* const tint_symbol_29, device ssbOut* const tint_symbol_30) {
int tileRow = 0; int tileRow = 0;
int tileCol = 0; int tileCol = 0;

View File

@ -25,20 +25,6 @@ struct LeftOver {
/* 0x0070 */ packed_float3 colorMul; /* 0x0070 */ packed_float3 colorMul;
/* 0x007c */ int8_t tint_pad_1[4]; /* 0x007c */ int8_t tint_pad_1[4];
}; };
struct main_out {
float4 glFragColor_1;
};
struct tint_symbol_2 {
float3 vPosition_param [[user(locn0)]];
float2 vUV_param [[user(locn1)]];
float2 tUV_param [[user(locn2)]];
float2 stageUnits_1_param [[user(locn3)]];
float2 levelUnits_param [[user(locn4)]];
float2 tileID_1_param [[user(locn5)]];
};
struct tint_symbol_3 {
float4 glFragColor_1 [[color(0)]];
};
float4x4 getFrameData_f1_(thread float* const frameID, const constant LeftOver* const tint_symbol_5, texture2d<float, access::sample> tint_symbol_6, sampler tint_symbol_7) { float4x4 getFrameData_f1_(thread float* const frameID, const constant LeftOver* const tint_symbol_5, texture2d<float, access::sample> tint_symbol_6, sampler tint_symbol_7) {
float fX = 0.0f; float fX = 0.0f;
@ -204,6 +190,23 @@ void main_1(thread float2* const tint_symbol_8, const constant LeftOver* const t
return; return;
} }
struct main_out {
float4 glFragColor_1;
};
struct tint_symbol_2 {
float3 vPosition_param [[user(locn0)]];
float2 vUV_param [[user(locn1)]];
float2 tUV_param [[user(locn2)]];
float2 stageUnits_1_param [[user(locn3)]];
float2 levelUnits_param [[user(locn4)]];
float2 tileID_1_param [[user(locn5)]];
};
struct tint_symbol_3 {
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, 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) {
*(tint_symbol_21) = tUV_param; *(tint_symbol_21) = tUV_param;
*(tint_symbol_22) = tileID_1_param; *(tint_symbol_22) = tileID_1_param;

View File

@ -16,6 +16,7 @@ struct lightingInfo {
float3 diffuse; float3 diffuse;
float3 specular; float3 specular;
}; };
struct LeftOver { struct LeftOver {
/* 0x0000 */ float4x4 u_World; /* 0x0000 */ float4x4 u_World;
/* 0x0040 */ float4x4 u_ViewProjection; /* 0x0040 */ float4x4 u_ViewProjection;
@ -28,6 +29,7 @@ struct LeftOver {
/* 0x00a4 */ uint padding_1; /* 0x00a4 */ uint padding_1;
/* 0x00a8 */ float2 tangentSpaceParameter0; /* 0x00a8 */ float2 tangentSpaceParameter0;
}; };
struct Light0 { struct Light0 {
/* 0x0000 */ float4 vLightData; /* 0x0000 */ float4 vLightData;
/* 0x0010 */ float4 vLightDiffuse; /* 0x0010 */ float4 vLightDiffuse;
@ -38,18 +40,6 @@ struct Light0 {
/* 0x0050 */ float2 depthValues; /* 0x0050 */ float2 depthValues;
/* 0x0058 */ int8_t tint_pad_1[8]; /* 0x0058 */ int8_t tint_pad_1[8];
}; };
struct main_out {
float4 glFragColor_1;
};
struct tint_symbol_2 {
float4 v_output1_param [[user(locn0)]];
float2 vMainuv_param [[user(locn1)]];
float4 v_output2_param [[user(locn2)]];
float2 v_uv_param [[user(locn3)]];
};
struct tint_symbol_3 {
float4 glFragColor_1 [[color(0)]];
};
float3x3 cotangent_frame_vf3_vf3_vf2_vf2_(thread float3* const normal_1, thread float3* const p, thread float2* const uv, thread float2* const tangentSpaceParams) { float3x3 cotangent_frame_vf3_vf3_vf2_vf2_(thread float3* const normal_1, thread float3* const p, thread float2* const uv, thread float2* const tangentSpaceParams) {
float3 dp1 = 0.0f; float3 dp1 = 0.0f;
@ -425,6 +415,21 @@ void main_1(thread float* const tint_symbol_5, thread float3* const tint_symbol_
return; return;
} }
struct main_out {
float4 glFragColor_1;
};
struct tint_symbol_2 {
float4 v_output1_param [[user(locn0)]];
float2 vMainuv_param [[user(locn1)]];
float4 v_output2_param [[user(locn2)]];
float2 v_uv_param [[user(locn3)]];
};
struct tint_symbol_3 {
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, 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) {
*(tint_symbol_19) = vMainuv_param; *(tint_symbol_19) = vMainuv_param;
*(tint_symbol_20) = v_output1_param; *(tint_symbol_20) = v_output1_param;

View File

@ -4,9 +4,11 @@ using namespace metal;
struct ssbOut { struct ssbOut {
/* 0x0000 */ float result[1]; /* 0x0000 */ float result[1];
}; };
struct ssbA { struct ssbA {
/* 0x0000 */ float A[1]; /* 0x0000 */ float A[1];
}; };
struct Uniforms { struct Uniforms {
/* 0x0000 */ float tint_symbol; /* 0x0000 */ float tint_symbol;
/* 0x0004 */ int aShape; /* 0x0004 */ int aShape;

View File

@ -4,12 +4,15 @@ using namespace metal;
struct ResultMatrix { struct ResultMatrix {
/* 0x0000 */ float numbers[1]; /* 0x0000 */ float numbers[1];
}; };
struct FirstMatrix { struct FirstMatrix {
float numbers[1]; float numbers[1];
}; };
struct SecondMatrix { struct SecondMatrix {
float numbers[1]; float numbers[1];
}; };
struct Uniforms { struct Uniforms {
float tint_symbol; float tint_symbol;
int sizeA; int sizeA;

View File

@ -4,12 +4,15 @@ using namespace metal;
struct FragmentInput { struct FragmentInput {
float2 vUv; float2 vUv;
}; };
struct FragmentOutput { struct FragmentOutput {
float4 color; float4 color;
}; };
struct tint_symbol_2 { struct tint_symbol_2 {
float2 vUv [[user(locn2)]]; float2 vUv [[user(locn2)]];
}; };
struct tint_symbol_3 { struct tint_symbol_3 {
float4 color [[color(0)]]; float4 color [[color(0)]];
}; };

View File

@ -12,17 +12,17 @@ inline vec<T, N> operator*(packed_vec<T, M> lhs, matrix<T, N, M> rhs) {
return vec<T, M>(lhs) * rhs; return vec<T, M>(lhs) * rhs;
} }
struct S {
/* 0x0000 */ packed_float3 v;
/* 0x000c */ uint i;
};
float3 Bad(uint index, float3 rd) { float3 Bad(uint index, float3 rd) {
float3 normal = float3(0.0f); float3 normal = float3(0.0f);
normal[index] = -(sign(rd[index])); normal[index] = -(sign(rd[index]));
return normalize(normal); return normalize(normal);
} }
struct S {
/* 0x0000 */ packed_float3 v;
/* 0x000c */ uint i;
};
void tint_symbol_inner(uint idx, device S* const tint_symbol_1) { void tint_symbol_inner(uint idx, device S* const tint_symbol_1) {
(*(tint_symbol_1)).v = Bad((*(tint_symbol_1)).i, (*(tint_symbol_1)).v); (*(tint_symbol_1)).v = Bad((*(tint_symbol_1)).i, (*(tint_symbol_1)).v);
} }

View File

@ -4,12 +4,15 @@ using namespace metal;
struct Constants { struct Constants {
/* 0x0000 */ uint zero; /* 0x0000 */ uint zero;
}; };
struct Result { struct Result {
/* 0x0000 */ uint value; /* 0x0000 */ uint value;
}; };
struct tint_array_wrapper { struct tint_array_wrapper {
/* 0x0000 */ atomic_int arr[3]; /* 0x0000 */ atomic_int arr[3];
}; };
struct TestData { struct TestData {
/* 0x0000 */ tint_array_wrapper data; /* 0x0000 */ tint_array_wrapper data;
}; };

View File

@ -4,12 +4,15 @@ using namespace metal;
struct Constants { struct Constants {
/* 0x0000 */ uint zero; /* 0x0000 */ uint zero;
}; };
struct Result { struct Result {
uint value; uint value;
}; };
struct tint_array_wrapper { struct tint_array_wrapper {
uint arr[3]; uint arr[3];
}; };
struct S { struct S {
tint_array_wrapper data; tint_array_wrapper data;
}; };

View File

@ -4,6 +4,7 @@ using namespace metal;
struct tint_symbol_1 { struct tint_symbol_1 {
/* 0x0000 */ uint4 buffer_size[1]; /* 0x0000 */ uint4 buffer_size[1];
}; };
struct S { struct S {
int a[1]; int a[1];
}; };

View File

@ -4,6 +4,7 @@ using namespace metal;
struct tint_symbol_1 { struct tint_symbol_1 {
/* 0x0000 */ uint4 buffer_size[1]; /* 0x0000 */ uint4 buffer_size[1];
}; };
struct S { struct S {
int a[1]; int a[1];
}; };

View File

@ -4,6 +4,7 @@ using namespace metal;
struct tint_symbol_1 { struct tint_symbol_1 {
/* 0x0000 */ uint4 buffer_size[1]; /* 0x0000 */ uint4 buffer_size[1];
}; };
struct S { struct S {
int a[1]; int a[1];
}; };

View File

@ -4,6 +4,7 @@ using namespace metal;
struct tint_symbol_1 { struct tint_symbol_1 {
/* 0x0000 */ uint4 buffer_size[1]; /* 0x0000 */ uint4 buffer_size[1];
}; };
struct S { struct S {
int a[1]; int a[1];
}; };

View File

@ -4,6 +4,7 @@ using namespace metal;
struct tint_symbol_1 { struct tint_symbol_1 {
/* 0x0000 */ uint4 buffer_size[1]; /* 0x0000 */ uint4 buffer_size[1];
}; };
struct S { struct S {
int a[1]; int a[1];
}; };

View File

@ -1,14 +1,14 @@
#include <metal_stdlib> #include <metal_stdlib>
using namespace metal; using namespace metal;
struct tint_symbol {
float4 value [[position]];
};
void abs_002533() { void abs_002533() {
float4 res = fabs(float4()); float4 res = fabs(float4());
} }
struct tint_symbol {
float4 value [[position]];
};
float4 vertex_main_inner() { float4 vertex_main_inner() {
abs_002533(); abs_002533();
return float4(); return float4();

View File

@ -1,14 +1,14 @@
#include <metal_stdlib> #include <metal_stdlib>
using namespace metal; using namespace metal;
struct tint_symbol {
float4 value [[position]];
};
void abs_005174() { void abs_005174() {
float3 res = fabs(float3()); float3 res = fabs(float3());
} }
struct tint_symbol {
float4 value [[position]];
};
float4 vertex_main_inner() { float4 vertex_main_inner() {
abs_005174(); abs_005174();
return float4(); return float4();

View File

@ -1,14 +1,14 @@
#include <metal_stdlib> #include <metal_stdlib>
using namespace metal; using namespace metal;
struct tint_symbol {
float4 value [[position]];
};
void abs_1ce782() { void abs_1ce782() {
uint4 res = abs(uint4()); uint4 res = abs(uint4());
} }
struct tint_symbol {
float4 value [[position]];
};
float4 vertex_main_inner() { float4 vertex_main_inner() {
abs_1ce782(); abs_1ce782();
return float4(); return float4();

View File

@ -1,14 +1,14 @@
#include <metal_stdlib> #include <metal_stdlib>
using namespace metal; using namespace metal;
struct tint_symbol {
float4 value [[position]];
};
void abs_1e9d53() { void abs_1e9d53() {
float2 res = fabs(float2()); float2 res = fabs(float2());
} }
struct tint_symbol {
float4 value [[position]];
};
float4 vertex_main_inner() { float4 vertex_main_inner() {
abs_1e9d53(); abs_1e9d53();
return float4(); return float4();

View File

@ -1,14 +1,14 @@
#include <metal_stdlib> #include <metal_stdlib>
using namespace metal; using namespace metal;
struct tint_symbol {
float4 value [[position]];
};
void abs_467cd1() { void abs_467cd1() {
uint res = abs(1u); uint res = abs(1u);
} }
struct tint_symbol {
float4 value [[position]];
};
float4 vertex_main_inner() { float4 vertex_main_inner() {
abs_467cd1(); abs_467cd1();
return float4(); return float4();

View File

@ -1,14 +1,14 @@
#include <metal_stdlib> #include <metal_stdlib>
using namespace metal; using namespace metal;
struct tint_symbol {
float4 value [[position]];
};
void abs_4ad288() { void abs_4ad288() {
int res = abs(1); int res = abs(1);
} }
struct tint_symbol {
float4 value [[position]];
};
float4 vertex_main_inner() { float4 vertex_main_inner() {
abs_4ad288(); abs_4ad288();
return float4(); return float4();

View File

@ -1,14 +1,14 @@
#include <metal_stdlib> #include <metal_stdlib>
using namespace metal; using namespace metal;
struct tint_symbol {
float4 value [[position]];
};
void abs_5ad50a() { void abs_5ad50a() {
int3 res = abs(int3()); int3 res = abs(int3());
} }
struct tint_symbol {
float4 value [[position]];
};
float4 vertex_main_inner() { float4 vertex_main_inner() {
abs_5ad50a(); abs_5ad50a();
return float4(); return float4();

View File

@ -1,14 +1,14 @@
#include <metal_stdlib> #include <metal_stdlib>
using namespace metal; using namespace metal;
struct tint_symbol {
float4 value [[position]];
};
void abs_7326de() { void abs_7326de() {
uint3 res = abs(uint3()); uint3 res = abs(uint3());
} }
struct tint_symbol {
float4 value [[position]];
};
float4 vertex_main_inner() { float4 vertex_main_inner() {
abs_7326de(); abs_7326de();
return float4(); return float4();

View File

@ -1,14 +1,14 @@
#include <metal_stdlib> #include <metal_stdlib>
using namespace metal; using namespace metal;
struct tint_symbol {
float4 value [[position]];
};
void abs_7f28e6() { void abs_7f28e6() {
uint2 res = abs(uint2()); uint2 res = abs(uint2());
} }
struct tint_symbol {
float4 value [[position]];
};
float4 vertex_main_inner() { float4 vertex_main_inner() {
abs_7f28e6(); abs_7f28e6();
return float4(); return float4();

View File

@ -1,14 +1,14 @@
#include <metal_stdlib> #include <metal_stdlib>
using namespace metal; using namespace metal;
struct tint_symbol {
float4 value [[position]];
};
void abs_7faa9e() { void abs_7faa9e() {
int2 res = abs(int2()); int2 res = abs(int2());
} }
struct tint_symbol {
float4 value [[position]];
};
float4 vertex_main_inner() { float4 vertex_main_inner() {
abs_7faa9e(); abs_7faa9e();
return float4(); return float4();

View File

@ -1,14 +1,14 @@
#include <metal_stdlib> #include <metal_stdlib>
using namespace metal; using namespace metal;
struct tint_symbol {
float4 value [[position]];
};
void abs_9c80a6() { void abs_9c80a6() {
int4 res = abs(int4()); int4 res = abs(int4());
} }
struct tint_symbol {
float4 value [[position]];
};
float4 vertex_main_inner() { float4 vertex_main_inner() {
abs_9c80a6(); abs_9c80a6();
return float4(); return float4();

View File

@ -1,14 +1,14 @@
#include <metal_stdlib> #include <metal_stdlib>
using namespace metal; using namespace metal;
struct tint_symbol {
float4 value [[position]];
};
void abs_b96037() { void abs_b96037() {
float res = fabs(1.0f); float res = fabs(1.0f);
} }
struct tint_symbol {
float4 value [[position]];
};
float4 vertex_main_inner() { float4 vertex_main_inner() {
abs_b96037(); abs_b96037();
return float4(); return float4();

View File

@ -1,14 +1,14 @@
#include <metal_stdlib> #include <metal_stdlib>
using namespace metal; using namespace metal;
struct tint_symbol {
float4 value [[position]];
};
void acos_489247() { void acos_489247() {
float res = acos(1.0f); float res = acos(1.0f);
} }
struct tint_symbol {
float4 value [[position]];
};
float4 vertex_main_inner() { float4 vertex_main_inner() {
acos_489247(); acos_489247();
return float4(); return float4();

View File

@ -1,14 +1,14 @@
#include <metal_stdlib> #include <metal_stdlib>
using namespace metal; using namespace metal;
struct tint_symbol {
float4 value [[position]];
};
void acos_8e2acf() { void acos_8e2acf() {
float4 res = acos(float4()); float4 res = acos(float4());
} }
struct tint_symbol {
float4 value [[position]];
};
float4 vertex_main_inner() { float4 vertex_main_inner() {
acos_8e2acf(); acos_8e2acf();
return float4(); return float4();

View File

@ -1,14 +1,14 @@
#include <metal_stdlib> #include <metal_stdlib>
using namespace metal; using namespace metal;
struct tint_symbol {
float4 value [[position]];
};
void acos_a610c4() { void acos_a610c4() {
float3 res = acos(float3()); float3 res = acos(float3());
} }
struct tint_symbol {
float4 value [[position]];
};
float4 vertex_main_inner() { float4 vertex_main_inner() {
acos_a610c4(); acos_a610c4();
return float4(); return float4();

View File

@ -1,14 +1,14 @@
#include <metal_stdlib> #include <metal_stdlib>
using namespace metal; using namespace metal;
struct tint_symbol {
float4 value [[position]];
};
void acos_dfc915() { void acos_dfc915() {
float2 res = acos(float2()); float2 res = acos(float2());
} }
struct tint_symbol {
float4 value [[position]];
};
float4 vertex_main_inner() { float4 vertex_main_inner() {
acos_dfc915(); acos_dfc915();
return float4(); return float4();

View File

@ -1,14 +1,14 @@
#include <metal_stdlib> #include <metal_stdlib>
using namespace metal; using namespace metal;
struct tint_symbol {
float4 value [[position]];
};
void all_353d6a() { void all_353d6a() {
bool res = all(bool()); bool res = all(bool());
} }
struct tint_symbol {
float4 value [[position]];
};
float4 vertex_main_inner() { float4 vertex_main_inner() {
all_353d6a(); all_353d6a();
return float4(); return float4();

View File

@ -1,14 +1,14 @@
#include <metal_stdlib> #include <metal_stdlib>
using namespace metal; using namespace metal;
struct tint_symbol {
float4 value [[position]];
};
void all_986c7b() { void all_986c7b() {
bool res = all(bool4()); bool res = all(bool4());
} }
struct tint_symbol {
float4 value [[position]];
};
float4 vertex_main_inner() { float4 vertex_main_inner() {
all_986c7b(); all_986c7b();
return float4(); return float4();

View File

@ -1,14 +1,14 @@
#include <metal_stdlib> #include <metal_stdlib>
using namespace metal; using namespace metal;
struct tint_symbol {
float4 value [[position]];
};
void all_bd2dba() { void all_bd2dba() {
bool res = all(bool3()); bool res = all(bool3());
} }
struct tint_symbol {
float4 value [[position]];
};
float4 vertex_main_inner() { float4 vertex_main_inner() {
all_bd2dba(); all_bd2dba();
return float4(); return float4();

View File

@ -1,14 +1,14 @@
#include <metal_stdlib> #include <metal_stdlib>
using namespace metal; using namespace metal;
struct tint_symbol {
float4 value [[position]];
};
void all_f46790() { void all_f46790() {
bool res = all(bool2()); bool res = all(bool2());
} }
struct tint_symbol {
float4 value [[position]];
};
float4 vertex_main_inner() { float4 vertex_main_inner() {
all_f46790(); all_f46790();
return float4(); return float4();

Some files were not shown because too many files have changed in this diff Show More