writer/hlsl: Simplify UBO accesses for static indexing
Use the new semantic constant value information to significantly reduce the complex indexing logic emitted for UBO accesses. This will dramatically reduce the number of `for` loops that are decayed to `while` loops. Change-Id: I1b0adb5edde2b4ed39c6beafc2e28106b86e0edd Reviewed-on: https://dawn-review.googlesource.com/c/tint/+/57701 Kokoro: Kokoro <noreply+kokoro@google.com> Reviewed-by: James Price <jrprice@google.com>
This commit is contained in:
parent
71f619b6f1
commit
51cfe26bb7
|
@ -624,11 +624,27 @@ bool GeneratorImpl::EmitUniformBufferAccess(
|
|||
ast::CallExpression* expr,
|
||||
const transform::DecomposeMemoryAccess::Intrinsic* intrinsic) {
|
||||
const auto& params = expr->params();
|
||||
auto* offset_arg = builder_.Sem().Get(params[1]);
|
||||
|
||||
std::string scalar_offset = UniqueIdentifier("scalar_offset");
|
||||
{
|
||||
uint32_t scalar_offset_value = 0;
|
||||
std::string scalar_offset_expr;
|
||||
|
||||
// If true, use scalar_offset_value, otherwise use scalar_offset_expr
|
||||
bool scalar_offset_constant = false;
|
||||
|
||||
if (auto val = offset_arg->ConstantValue()) {
|
||||
TINT_ASSERT(Writer, val.Type()->Is<sem::U32>());
|
||||
scalar_offset_value = val.Elements()[0].u32;
|
||||
scalar_offset_value /= 4; // bytes -> scalar index
|
||||
scalar_offset_constant = true;
|
||||
}
|
||||
|
||||
if (!scalar_offset_constant) {
|
||||
// UBO offset not compile-time known.
|
||||
// Calculate the scalar offset into a temporary.
|
||||
scalar_offset_expr = UniqueIdentifier("scalar_offset");
|
||||
auto pre = line();
|
||||
pre << "const uint " << scalar_offset << " = (";
|
||||
pre << "const uint " << scalar_offset_expr << " = (";
|
||||
if (!EmitExpression(pre, params[1])) { // offset
|
||||
return false;
|
||||
}
|
||||
|
@ -649,32 +665,37 @@ bool GeneratorImpl::EmitUniformBufferAccess(
|
|||
if (!EmitExpression(out, params[0])) { // buffer
|
||||
return false;
|
||||
}
|
||||
out << "[" << scalar_offset << " / 4][" << scalar_offset << " % 4]";
|
||||
if (scalar_offset_constant) {
|
||||
char swizzle[] = {'x', 'y', 'z', 'w'};
|
||||
out << "[" << (scalar_offset_value / 4) << "]."
|
||||
<< swizzle[scalar_offset_value & 3];
|
||||
} else {
|
||||
out << "[" << scalar_offset_expr << " / 4][" << scalar_offset_expr
|
||||
<< " % 4]";
|
||||
}
|
||||
return true;
|
||||
};
|
||||
// Has a minimum alignment of 8 bytes, so is either .xy or .zw
|
||||
auto load_vec2 = [&] {
|
||||
std::string ubo_load = UniqueIdentifier("ubo_load");
|
||||
|
||||
{
|
||||
auto pre = line();
|
||||
pre << "uint4 " << ubo_load << " = ";
|
||||
if (!EmitExpression(pre, params[0])) { // buffer
|
||||
if (scalar_offset_constant) {
|
||||
if (!EmitExpression(out, params[0])) { // buffer
|
||||
return false;
|
||||
}
|
||||
pre << "[" << scalar_offset << " / 4];";
|
||||
out << "[" << (scalar_offset_value / 4) << "]";
|
||||
out << ((scalar_offset_value & 2) == 0 ? ".xy" : ".zw");
|
||||
} else {
|
||||
std::string ubo_load = UniqueIdentifier("ubo_load");
|
||||
{
|
||||
auto pre = line();
|
||||
pre << "uint4 " << ubo_load << " = ";
|
||||
if (!EmitExpression(pre, params[0])) { // buffer
|
||||
return false;
|
||||
}
|
||||
pre << "[" << scalar_offset_expr << " / 4];";
|
||||
}
|
||||
out << "((" << scalar_offset_expr << " & 2) ? " << ubo_load
|
||||
<< ".zw : " << ubo_load << ".xy)";
|
||||
}
|
||||
|
||||
out << "((" << scalar_offset << " & 2) ? " << ubo_load
|
||||
<< ".zw : " << ubo_load << ".xy)";
|
||||
return true;
|
||||
};
|
||||
// vec3 has a minimum alignment of 16 bytes, so is just a .xyz swizzle
|
||||
auto load_vec3 = [&] {
|
||||
if (!EmitExpression(out, params[0])) { // buffer
|
||||
return false;
|
||||
}
|
||||
out << "[" << scalar_offset << " / 4].xyz";
|
||||
return true;
|
||||
};
|
||||
// vec4 has a minimum alignment of 16 bytes, easiest case
|
||||
|
@ -682,7 +703,19 @@ bool GeneratorImpl::EmitUniformBufferAccess(
|
|||
if (!EmitExpression(out, params[0])) { // buffer
|
||||
return false;
|
||||
}
|
||||
out << "[" << scalar_offset << " / 4]";
|
||||
if (scalar_offset_constant) {
|
||||
out << "[" << (scalar_offset_value / 4) << "]";
|
||||
} else {
|
||||
out << "[" << scalar_offset_expr << " / 4]";
|
||||
}
|
||||
return true;
|
||||
};
|
||||
// vec3 has a minimum alignment of 16 bytes, so is just a .xyz swizzle
|
||||
auto load_vec3 = [&] {
|
||||
if (!load_vec4()) {
|
||||
return false;
|
||||
}
|
||||
out << ".xyz";
|
||||
return true;
|
||||
};
|
||||
switch (intrinsic->type) {
|
||||
|
|
|
@ -335,7 +335,7 @@ TEST_F(HlslGeneratorImplTest_Function,
|
|||
Stage(ast::PipelineStage::kFragment),
|
||||
});
|
||||
|
||||
GeneratorImpl& gen = Build();
|
||||
GeneratorImpl& gen = SanitizeAndBuild();
|
||||
|
||||
ASSERT_TRUE(gen.Generate()) << gen.error();
|
||||
EXPECT_EQ(gen.result(), R"(cbuffer cbuffer_ubo : register(b0, space1) {
|
||||
|
@ -343,7 +343,7 @@ TEST_F(HlslGeneratorImplTest_Function,
|
|||
};
|
||||
|
||||
float sub_func(float param) {
|
||||
return ubo.coord.x;
|
||||
return asfloat(ubo[0].x);
|
||||
}
|
||||
|
||||
void frag_main() {
|
||||
|
|
|
@ -0,0 +1,31 @@
|
|||
struct Inner {
|
||||
a : vec3<i32>;
|
||||
b : i32;
|
||||
c : vec3<u32>;
|
||||
d : u32;
|
||||
e : vec3<f32>;
|
||||
f : f32;
|
||||
g : mat2x3<f32>;
|
||||
h : mat3x2<f32>;
|
||||
i : [[stride(16)]] array<vec4<i32>, 4>;
|
||||
};
|
||||
|
||||
[[block]]
|
||||
struct S {
|
||||
arr : array<Inner>;
|
||||
};
|
||||
|
||||
[[binding(0), group(0)]] var<storage, read> s : S;
|
||||
|
||||
[[stage(compute), workgroup_size(1)]]
|
||||
fn main([[builtin(local_invocation_index)]] idx : u32) {
|
||||
let a = s.arr[idx].a;
|
||||
let b = s.arr[idx].b;
|
||||
let c = s.arr[idx].c;
|
||||
let d = s.arr[idx].d;
|
||||
let e = s.arr[idx].e;
|
||||
let f = s.arr[idx].f;
|
||||
let g = s.arr[idx].g;
|
||||
let h = s.arr[idx].h;
|
||||
let i = s.arr[idx].i;
|
||||
}
|
|
@ -0,0 +1,34 @@
|
|||
float2x3 tint_symbol_8(ByteAddressBuffer buffer, uint offset) {
|
||||
return float2x3(asfloat(buffer.Load3((offset + 0u))), asfloat(buffer.Load3((offset + 16u))));
|
||||
}
|
||||
|
||||
float3x2 tint_symbol_10(ByteAddressBuffer buffer, uint offset) {
|
||||
return float3x2(asfloat(buffer.Load2((offset + 0u))), asfloat(buffer.Load2((offset + 8u))), asfloat(buffer.Load2((offset + 16u))));
|
||||
}
|
||||
|
||||
typedef int4 tint_symbol_12_ret[4];
|
||||
tint_symbol_12_ret tint_symbol_12(ByteAddressBuffer buffer, uint offset) {
|
||||
const int4 tint_symbol_13[4] = {asint(buffer.Load4((offset + 0u))), asint(buffer.Load4((offset + 16u))), asint(buffer.Load4((offset + 32u))), asint(buffer.Load4((offset + 48u)))};
|
||||
return tint_symbol_13;
|
||||
}
|
||||
|
||||
ByteAddressBuffer s : register(t0, space0);
|
||||
|
||||
struct tint_symbol_1 {
|
||||
uint idx : SV_GroupIndex;
|
||||
};
|
||||
|
||||
[numthreads(1, 1, 1)]
|
||||
void main(tint_symbol_1 tint_symbol) {
|
||||
const uint idx = tint_symbol.idx;
|
||||
const int3 a = asint(s.Load3((176u * idx)));
|
||||
const int b = asint(s.Load(((176u * idx) + 12u)));
|
||||
const uint3 c = s.Load3(((176u * idx) + 16u));
|
||||
const uint d = s.Load(((176u * idx) + 28u));
|
||||
const float3 e = asfloat(s.Load3(((176u * idx) + 32u)));
|
||||
const float f = asfloat(s.Load(((176u * idx) + 44u)));
|
||||
const float2x3 g = tint_symbol_8(s, ((176u * idx) + 48u));
|
||||
const float3x2 h = tint_symbol_10(s, ((176u * idx) + 80u));
|
||||
const int4 i[4] = tint_symbol_12(s, ((176u * idx) + 112u));
|
||||
return;
|
||||
}
|
|
@ -0,0 +1,35 @@
|
|||
#include <metal_stdlib>
|
||||
|
||||
using namespace metal;
|
||||
struct tint_array_wrapper {
|
||||
/* 0x0000 */ int4 arr[4];
|
||||
};
|
||||
struct Inner {
|
||||
/* 0x0000 */ packed_int3 a;
|
||||
/* 0x000c */ int b;
|
||||
/* 0x0010 */ packed_uint3 c;
|
||||
/* 0x001c */ uint d;
|
||||
/* 0x0020 */ packed_float3 e;
|
||||
/* 0x002c */ float f;
|
||||
/* 0x0030 */ float2x3 g;
|
||||
/* 0x0050 */ float3x2 h;
|
||||
/* 0x0068 */ int8_t tint_pad[8];
|
||||
/* 0x0070 */ tint_array_wrapper i;
|
||||
};
|
||||
struct S {
|
||||
/* 0x0000 */ Inner arr[1];
|
||||
};
|
||||
|
||||
kernel void tint_symbol(uint idx [[thread_index_in_threadgroup]], const device S& s [[buffer(0)]]) {
|
||||
int3 const a = s.arr[idx].a;
|
||||
int const b = s.arr[idx].b;
|
||||
uint3 const c = s.arr[idx].c;
|
||||
uint const d = s.arr[idx].d;
|
||||
float3 const e = s.arr[idx].e;
|
||||
float const f = s.arr[idx].f;
|
||||
float2x3 const g = s.arr[idx].g;
|
||||
float3x2 const h = s.arr[idx].h;
|
||||
tint_array_wrapper const i = s.arr[idx].i;
|
||||
return;
|
||||
}
|
||||
|
|
@ -0,0 +1,114 @@
|
|||
; SPIR-V
|
||||
; Version: 1.3
|
||||
; Generator: Google Tint Compiler; 0
|
||||
; Bound: 68
|
||||
; Schema: 0
|
||||
OpCapability Shader
|
||||
OpMemoryModel Logical GLSL450
|
||||
OpEntryPoint GLCompute %main "main" %tint_symbol
|
||||
OpExecutionMode %main LocalSize 1 1 1
|
||||
OpName %S "S"
|
||||
OpMemberName %S 0 "arr"
|
||||
OpName %Inner "Inner"
|
||||
OpMemberName %Inner 0 "a"
|
||||
OpMemberName %Inner 1 "b"
|
||||
OpMemberName %Inner 2 "c"
|
||||
OpMemberName %Inner 3 "d"
|
||||
OpMemberName %Inner 4 "e"
|
||||
OpMemberName %Inner 5 "f"
|
||||
OpMemberName %Inner 6 "g"
|
||||
OpMemberName %Inner 7 "h"
|
||||
OpMemberName %Inner 8 "i"
|
||||
OpName %s "s"
|
||||
OpName %tint_symbol "tint_symbol"
|
||||
OpName %main "main"
|
||||
OpDecorate %S Block
|
||||
OpMemberDecorate %S 0 Offset 0
|
||||
OpMemberDecorate %Inner 0 Offset 0
|
||||
OpMemberDecorate %Inner 1 Offset 12
|
||||
OpMemberDecorate %Inner 2 Offset 16
|
||||
OpMemberDecorate %Inner 3 Offset 28
|
||||
OpMemberDecorate %Inner 4 Offset 32
|
||||
OpMemberDecorate %Inner 5 Offset 44
|
||||
OpMemberDecorate %Inner 6 Offset 48
|
||||
OpMemberDecorate %Inner 6 ColMajor
|
||||
OpMemberDecorate %Inner 6 MatrixStride 16
|
||||
OpMemberDecorate %Inner 7 Offset 80
|
||||
OpMemberDecorate %Inner 7 ColMajor
|
||||
OpMemberDecorate %Inner 7 MatrixStride 8
|
||||
OpMemberDecorate %Inner 8 Offset 112
|
||||
OpDecorate %_arr_v4int_uint_4 ArrayStride 16
|
||||
OpDecorate %_runtimearr_Inner ArrayStride 176
|
||||
OpDecorate %s NonWritable
|
||||
OpDecorate %s Binding 0
|
||||
OpDecorate %s DescriptorSet 0
|
||||
OpDecorate %tint_symbol BuiltIn LocalInvocationIndex
|
||||
%int = OpTypeInt 32 1
|
||||
%v3int = OpTypeVector %int 3
|
||||
%uint = OpTypeInt 32 0
|
||||
%v3uint = OpTypeVector %uint 3
|
||||
%float = OpTypeFloat 32
|
||||
%v3float = OpTypeVector %float 3
|
||||
%mat2v3float = OpTypeMatrix %v3float 2
|
||||
%v2float = OpTypeVector %float 2
|
||||
%mat3v2float = OpTypeMatrix %v2float 3
|
||||
%v4int = OpTypeVector %int 4
|
||||
%uint_4 = OpConstant %uint 4
|
||||
%_arr_v4int_uint_4 = OpTypeArray %v4int %uint_4
|
||||
%Inner = OpTypeStruct %v3int %int %v3uint %uint %v3float %float %mat2v3float %mat3v2float %_arr_v4int_uint_4
|
||||
%_runtimearr_Inner = OpTypeRuntimeArray %Inner
|
||||
%S = OpTypeStruct %_runtimearr_Inner
|
||||
%_ptr_StorageBuffer_S = OpTypePointer StorageBuffer %S
|
||||
%s = OpVariable %_ptr_StorageBuffer_S StorageBuffer
|
||||
%_ptr_Input_uint = OpTypePointer Input %uint
|
||||
%tint_symbol = OpVariable %_ptr_Input_uint Input
|
||||
%void = OpTypeVoid
|
||||
%20 = OpTypeFunction %void
|
||||
%uint_0 = OpConstant %uint 0
|
||||
%_ptr_StorageBuffer_v3int = OpTypePointer StorageBuffer %v3int
|
||||
%uint_1 = OpConstant %uint 1
|
||||
%_ptr_StorageBuffer_int = OpTypePointer StorageBuffer %int
|
||||
%uint_2 = OpConstant %uint 2
|
||||
%_ptr_StorageBuffer_v3uint = OpTypePointer StorageBuffer %v3uint
|
||||
%uint_3 = OpConstant %uint 3
|
||||
%_ptr_StorageBuffer_uint = OpTypePointer StorageBuffer %uint
|
||||
%_ptr_StorageBuffer_v3float = OpTypePointer StorageBuffer %v3float
|
||||
%uint_5 = OpConstant %uint 5
|
||||
%_ptr_StorageBuffer_float = OpTypePointer StorageBuffer %float
|
||||
%uint_6 = OpConstant %uint 6
|
||||
%_ptr_StorageBuffer_mat2v3float = OpTypePointer StorageBuffer %mat2v3float
|
||||
%uint_7 = OpConstant %uint 7
|
||||
%_ptr_StorageBuffer_mat3v2float = OpTypePointer StorageBuffer %mat3v2float
|
||||
%uint_8 = OpConstant %uint 8
|
||||
%_ptr_StorageBuffer__arr_v4int_uint_4 = OpTypePointer StorageBuffer %_arr_v4int_uint_4
|
||||
%main = OpFunction %void None %20
|
||||
%23 = OpLabel
|
||||
%25 = OpLoad %uint %tint_symbol
|
||||
%27 = OpAccessChain %_ptr_StorageBuffer_v3int %s %uint_0 %25 %uint_0
|
||||
%28 = OpLoad %v3int %27
|
||||
%29 = OpLoad %uint %tint_symbol
|
||||
%32 = OpAccessChain %_ptr_StorageBuffer_int %s %uint_0 %29 %uint_1
|
||||
%33 = OpLoad %int %32
|
||||
%34 = OpLoad %uint %tint_symbol
|
||||
%37 = OpAccessChain %_ptr_StorageBuffer_v3uint %s %uint_0 %34 %uint_2
|
||||
%38 = OpLoad %v3uint %37
|
||||
%39 = OpLoad %uint %tint_symbol
|
||||
%42 = OpAccessChain %_ptr_StorageBuffer_uint %s %uint_0 %39 %uint_3
|
||||
%43 = OpLoad %uint %42
|
||||
%44 = OpLoad %uint %tint_symbol
|
||||
%46 = OpAccessChain %_ptr_StorageBuffer_v3float %s %uint_0 %44 %uint_4
|
||||
%47 = OpLoad %v3float %46
|
||||
%48 = OpLoad %uint %tint_symbol
|
||||
%51 = OpAccessChain %_ptr_StorageBuffer_float %s %uint_0 %48 %uint_5
|
||||
%52 = OpLoad %float %51
|
||||
%53 = OpLoad %uint %tint_symbol
|
||||
%56 = OpAccessChain %_ptr_StorageBuffer_mat2v3float %s %uint_0 %53 %uint_6
|
||||
%57 = OpLoad %mat2v3float %56
|
||||
%58 = OpLoad %uint %tint_symbol
|
||||
%61 = OpAccessChain %_ptr_StorageBuffer_mat3v2float %s %uint_0 %58 %uint_7
|
||||
%62 = OpLoad %mat3v2float %61
|
||||
%63 = OpLoad %uint %tint_symbol
|
||||
%66 = OpAccessChain %_ptr_StorageBuffer__arr_v4int_uint_4 %s %uint_0 %63 %uint_8
|
||||
%67 = OpLoad %_arr_v4int_uint_4 %66
|
||||
OpReturn
|
||||
OpFunctionEnd
|
|
@ -0,0 +1,31 @@
|
|||
struct Inner {
|
||||
a : vec3<i32>;
|
||||
b : i32;
|
||||
c : vec3<u32>;
|
||||
d : u32;
|
||||
e : vec3<f32>;
|
||||
f : f32;
|
||||
g : mat2x3<f32>;
|
||||
h : mat3x2<f32>;
|
||||
i : [[stride(16)]] array<vec4<i32>, 4>;
|
||||
};
|
||||
|
||||
[[block]]
|
||||
struct S {
|
||||
arr : array<Inner>;
|
||||
};
|
||||
|
||||
[[binding(0), group(0)]] var<storage, read> s : S;
|
||||
|
||||
[[stage(compute), workgroup_size(1)]]
|
||||
fn main([[builtin(local_invocation_index)]] idx : u32) {
|
||||
let a = s.arr[idx].a;
|
||||
let b = s.arr[idx].b;
|
||||
let c = s.arr[idx].c;
|
||||
let d = s.arr[idx].d;
|
||||
let e = s.arr[idx].e;
|
||||
let f = s.arr[idx].f;
|
||||
let g = s.arr[idx].g;
|
||||
let h = s.arr[idx].h;
|
||||
let i = s.arr[idx].i;
|
||||
}
|
|
@ -0,0 +1,31 @@
|
|||
struct Inner {
|
||||
a : vec3<i32>;
|
||||
b : i32;
|
||||
c : vec3<u32>;
|
||||
d : u32;
|
||||
e : vec3<f32>;
|
||||
f : f32;
|
||||
g : mat2x3<f32>;
|
||||
h : mat3x2<f32>;
|
||||
i : [[stride(16)]] array<vec4<i32>, 4>;
|
||||
};
|
||||
|
||||
[[block]]
|
||||
struct S {
|
||||
arr : array<Inner>;
|
||||
};
|
||||
|
||||
[[binding(0), group(0)]] var<storage, read_write> s : S;
|
||||
|
||||
[[stage(compute), workgroup_size(1)]]
|
||||
fn main([[builtin(local_invocation_index)]] idx : u32) {
|
||||
s.arr[idx].a = vec3<i32>();
|
||||
s.arr[idx].b = i32();
|
||||
s.arr[idx].c = vec3<u32>();
|
||||
s.arr[idx].d = u32();
|
||||
s.arr[idx].e = vec3<f32>();
|
||||
s.arr[idx].f = f32();
|
||||
s.arr[idx].g = mat2x3<f32>();
|
||||
s.arr[idx].h = mat3x2<f32>();
|
||||
s.arr[idx].i = [[stride(16)]] array<vec4<i32>, 4>();
|
||||
}
|
|
@ -0,0 +1,39 @@
|
|||
void tint_symbol_8(RWByteAddressBuffer buffer, uint offset, float2x3 value) {
|
||||
buffer.Store3((offset + 0u), asuint(value[0u]));
|
||||
buffer.Store3((offset + 16u), asuint(value[1u]));
|
||||
}
|
||||
|
||||
void tint_symbol_10(RWByteAddressBuffer buffer, uint offset, float3x2 value) {
|
||||
buffer.Store2((offset + 0u), asuint(value[0u]));
|
||||
buffer.Store2((offset + 8u), asuint(value[1u]));
|
||||
buffer.Store2((offset + 16u), asuint(value[2u]));
|
||||
}
|
||||
|
||||
void tint_symbol_12(RWByteAddressBuffer buffer, uint offset, int4 value[4]) {
|
||||
buffer.Store4((offset + 0u), asuint(value[0u]));
|
||||
buffer.Store4((offset + 16u), asuint(value[1u]));
|
||||
buffer.Store4((offset + 32u), asuint(value[2u]));
|
||||
buffer.Store4((offset + 48u), asuint(value[3u]));
|
||||
}
|
||||
|
||||
RWByteAddressBuffer s : register(u0, space0);
|
||||
|
||||
struct tint_symbol_1 {
|
||||
uint idx : SV_GroupIndex;
|
||||
};
|
||||
|
||||
[numthreads(1, 1, 1)]
|
||||
void main(tint_symbol_1 tint_symbol) {
|
||||
const uint idx = tint_symbol.idx;
|
||||
s.Store3((176u * idx), asuint(int3(0, 0, 0)));
|
||||
s.Store(((176u * idx) + 12u), asuint(0));
|
||||
s.Store3(((176u * idx) + 16u), asuint(uint3(0u, 0u, 0u)));
|
||||
s.Store(((176u * idx) + 28u), asuint(0u));
|
||||
s.Store3(((176u * idx) + 32u), asuint(float3(0.0f, 0.0f, 0.0f)));
|
||||
s.Store(((176u * idx) + 44u), asuint(0.0f));
|
||||
tint_symbol_8(s, ((176u * idx) + 48u), float2x3(0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f));
|
||||
tint_symbol_10(s, ((176u * idx) + 80u), float3x2(0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f));
|
||||
const int4 tint_symbol_13[4] = (int4[4])0;
|
||||
tint_symbol_12(s, ((176u * idx) + 112u), tint_symbol_13);
|
||||
return;
|
||||
}
|
|
@ -0,0 +1,36 @@
|
|||
#include <metal_stdlib>
|
||||
|
||||
using namespace metal;
|
||||
struct tint_array_wrapper {
|
||||
/* 0x0000 */ int4 arr[4];
|
||||
};
|
||||
struct Inner {
|
||||
/* 0x0000 */ packed_int3 a;
|
||||
/* 0x000c */ int b;
|
||||
/* 0x0010 */ packed_uint3 c;
|
||||
/* 0x001c */ uint d;
|
||||
/* 0x0020 */ packed_float3 e;
|
||||
/* 0x002c */ float f;
|
||||
/* 0x0030 */ float2x3 g;
|
||||
/* 0x0050 */ float3x2 h;
|
||||
/* 0x0068 */ int8_t tint_pad[8];
|
||||
/* 0x0070 */ tint_array_wrapper i;
|
||||
};
|
||||
struct S {
|
||||
/* 0x0000 */ Inner arr[1];
|
||||
};
|
||||
|
||||
kernel void tint_symbol(uint idx [[thread_index_in_threadgroup]], device S& s [[buffer(0)]]) {
|
||||
s.arr[idx].a = int3();
|
||||
s.arr[idx].b = int();
|
||||
s.arr[idx].c = uint3();
|
||||
s.arr[idx].d = uint();
|
||||
s.arr[idx].e = float3();
|
||||
s.arr[idx].f = float();
|
||||
s.arr[idx].g = float2x3();
|
||||
s.arr[idx].h = float3x2();
|
||||
tint_array_wrapper const tint_symbol_2 = {.arr={}};
|
||||
s.arr[idx].i = tint_symbol_2;
|
||||
return;
|
||||
}
|
||||
|
|
@ -0,0 +1,122 @@
|
|||
; SPIR-V
|
||||
; Version: 1.3
|
||||
; Generator: Google Tint Compiler; 0
|
||||
; Bound: 68
|
||||
; Schema: 0
|
||||
OpCapability Shader
|
||||
OpMemoryModel Logical GLSL450
|
||||
OpEntryPoint GLCompute %main "main" %tint_symbol
|
||||
OpExecutionMode %main LocalSize 1 1 1
|
||||
OpName %S "S"
|
||||
OpMemberName %S 0 "arr"
|
||||
OpName %Inner "Inner"
|
||||
OpMemberName %Inner 0 "a"
|
||||
OpMemberName %Inner 1 "b"
|
||||
OpMemberName %Inner 2 "c"
|
||||
OpMemberName %Inner 3 "d"
|
||||
OpMemberName %Inner 4 "e"
|
||||
OpMemberName %Inner 5 "f"
|
||||
OpMemberName %Inner 6 "g"
|
||||
OpMemberName %Inner 7 "h"
|
||||
OpMemberName %Inner 8 "i"
|
||||
OpName %s "s"
|
||||
OpName %tint_symbol "tint_symbol"
|
||||
OpName %main "main"
|
||||
OpDecorate %S Block
|
||||
OpMemberDecorate %S 0 Offset 0
|
||||
OpMemberDecorate %Inner 0 Offset 0
|
||||
OpMemberDecorate %Inner 1 Offset 12
|
||||
OpMemberDecorate %Inner 2 Offset 16
|
||||
OpMemberDecorate %Inner 3 Offset 28
|
||||
OpMemberDecorate %Inner 4 Offset 32
|
||||
OpMemberDecorate %Inner 5 Offset 44
|
||||
OpMemberDecorate %Inner 6 Offset 48
|
||||
OpMemberDecorate %Inner 6 ColMajor
|
||||
OpMemberDecorate %Inner 6 MatrixStride 16
|
||||
OpMemberDecorate %Inner 7 Offset 80
|
||||
OpMemberDecorate %Inner 7 ColMajor
|
||||
OpMemberDecorate %Inner 7 MatrixStride 8
|
||||
OpMemberDecorate %Inner 8 Offset 112
|
||||
OpDecorate %_arr_v4int_uint_4 ArrayStride 16
|
||||
OpDecorate %_runtimearr_Inner ArrayStride 176
|
||||
OpDecorate %s Binding 0
|
||||
OpDecorate %s DescriptorSet 0
|
||||
OpDecorate %tint_symbol BuiltIn LocalInvocationIndex
|
||||
%int = OpTypeInt 32 1
|
||||
%v3int = OpTypeVector %int 3
|
||||
%uint = OpTypeInt 32 0
|
||||
%v3uint = OpTypeVector %uint 3
|
||||
%float = OpTypeFloat 32
|
||||
%v3float = OpTypeVector %float 3
|
||||
%mat2v3float = OpTypeMatrix %v3float 2
|
||||
%v2float = OpTypeVector %float 2
|
||||
%mat3v2float = OpTypeMatrix %v2float 3
|
||||
%v4int = OpTypeVector %int 4
|
||||
%uint_4 = OpConstant %uint 4
|
||||
%_arr_v4int_uint_4 = OpTypeArray %v4int %uint_4
|
||||
%Inner = OpTypeStruct %v3int %int %v3uint %uint %v3float %float %mat2v3float %mat3v2float %_arr_v4int_uint_4
|
||||
%_runtimearr_Inner = OpTypeRuntimeArray %Inner
|
||||
%S = OpTypeStruct %_runtimearr_Inner
|
||||
%_ptr_StorageBuffer_S = OpTypePointer StorageBuffer %S
|
||||
%s = OpVariable %_ptr_StorageBuffer_S StorageBuffer
|
||||
%_ptr_Input_uint = OpTypePointer Input %uint
|
||||
%tint_symbol = OpVariable %_ptr_Input_uint Input
|
||||
%void = OpTypeVoid
|
||||
%20 = OpTypeFunction %void
|
||||
%uint_0 = OpConstant %uint 0
|
||||
%_ptr_StorageBuffer_v3int = OpTypePointer StorageBuffer %v3int
|
||||
%28 = OpConstantNull %v3int
|
||||
%uint_1 = OpConstant %uint 1
|
||||
%_ptr_StorageBuffer_int = OpTypePointer StorageBuffer %int
|
||||
%33 = OpConstantNull %int
|
||||
%uint_2 = OpConstant %uint 2
|
||||
%_ptr_StorageBuffer_v3uint = OpTypePointer StorageBuffer %v3uint
|
||||
%38 = OpConstantNull %v3uint
|
||||
%uint_3 = OpConstant %uint 3
|
||||
%_ptr_StorageBuffer_uint = OpTypePointer StorageBuffer %uint
|
||||
%43 = OpConstantNull %uint
|
||||
%_ptr_StorageBuffer_v3float = OpTypePointer StorageBuffer %v3float
|
||||
%47 = OpConstantNull %v3float
|
||||
%uint_5 = OpConstant %uint 5
|
||||
%_ptr_StorageBuffer_float = OpTypePointer StorageBuffer %float
|
||||
%52 = OpConstantNull %float
|
||||
%uint_6 = OpConstant %uint 6
|
||||
%_ptr_StorageBuffer_mat2v3float = OpTypePointer StorageBuffer %mat2v3float
|
||||
%57 = OpConstantNull %mat2v3float
|
||||
%uint_7 = OpConstant %uint 7
|
||||
%_ptr_StorageBuffer_mat3v2float = OpTypePointer StorageBuffer %mat3v2float
|
||||
%62 = OpConstantNull %mat3v2float
|
||||
%uint_8 = OpConstant %uint 8
|
||||
%_ptr_StorageBuffer__arr_v4int_uint_4 = OpTypePointer StorageBuffer %_arr_v4int_uint_4
|
||||
%67 = OpConstantNull %_arr_v4int_uint_4
|
||||
%main = OpFunction %void None %20
|
||||
%23 = OpLabel
|
||||
%25 = OpLoad %uint %tint_symbol
|
||||
%27 = OpAccessChain %_ptr_StorageBuffer_v3int %s %uint_0 %25 %uint_0
|
||||
OpStore %27 %28
|
||||
%29 = OpLoad %uint %tint_symbol
|
||||
%32 = OpAccessChain %_ptr_StorageBuffer_int %s %uint_0 %29 %uint_1
|
||||
OpStore %32 %33
|
||||
%34 = OpLoad %uint %tint_symbol
|
||||
%37 = OpAccessChain %_ptr_StorageBuffer_v3uint %s %uint_0 %34 %uint_2
|
||||
OpStore %37 %38
|
||||
%39 = OpLoad %uint %tint_symbol
|
||||
%42 = OpAccessChain %_ptr_StorageBuffer_uint %s %uint_0 %39 %uint_3
|
||||
OpStore %42 %43
|
||||
%44 = OpLoad %uint %tint_symbol
|
||||
%46 = OpAccessChain %_ptr_StorageBuffer_v3float %s %uint_0 %44 %uint_4
|
||||
OpStore %46 %47
|
||||
%48 = OpLoad %uint %tint_symbol
|
||||
%51 = OpAccessChain %_ptr_StorageBuffer_float %s %uint_0 %48 %uint_5
|
||||
OpStore %51 %52
|
||||
%53 = OpLoad %uint %tint_symbol
|
||||
%56 = OpAccessChain %_ptr_StorageBuffer_mat2v3float %s %uint_0 %53 %uint_6
|
||||
OpStore %56 %57
|
||||
%58 = OpLoad %uint %tint_symbol
|
||||
%61 = OpAccessChain %_ptr_StorageBuffer_mat3v2float %s %uint_0 %58 %uint_7
|
||||
OpStore %61 %62
|
||||
%63 = OpLoad %uint %tint_symbol
|
||||
%66 = OpAccessChain %_ptr_StorageBuffer__arr_v4int_uint_4 %s %uint_0 %63 %uint_8
|
||||
OpStore %66 %67
|
||||
OpReturn
|
||||
OpFunctionEnd
|
|
@ -0,0 +1,31 @@
|
|||
struct Inner {
|
||||
a : vec3<i32>;
|
||||
b : i32;
|
||||
c : vec3<u32>;
|
||||
d : u32;
|
||||
e : vec3<f32>;
|
||||
f : f32;
|
||||
g : mat2x3<f32>;
|
||||
h : mat3x2<f32>;
|
||||
i : [[stride(16)]] array<vec4<i32>, 4>;
|
||||
};
|
||||
|
||||
[[block]]
|
||||
struct S {
|
||||
arr : array<Inner>;
|
||||
};
|
||||
|
||||
[[binding(0), group(0)]] var<storage, read_write> s : S;
|
||||
|
||||
[[stage(compute), workgroup_size(1)]]
|
||||
fn main([[builtin(local_invocation_index)]] idx : u32) {
|
||||
s.arr[idx].a = vec3<i32>();
|
||||
s.arr[idx].b = i32();
|
||||
s.arr[idx].c = vec3<u32>();
|
||||
s.arr[idx].d = u32();
|
||||
s.arr[idx].e = vec3<f32>();
|
||||
s.arr[idx].f = f32();
|
||||
s.arr[idx].g = mat2x3<f32>();
|
||||
s.arr[idx].h = mat3x2<f32>();
|
||||
s.arr[idx].i = [[stride(16)]] array<vec4<i32>, 4>();
|
||||
}
|
|
@ -0,0 +1,33 @@
|
|||
struct Inner {
|
||||
x : i32;
|
||||
};
|
||||
|
||||
[[block]]
|
||||
struct S {
|
||||
a : vec3<i32>;
|
||||
b : i32;
|
||||
c : vec3<u32>;
|
||||
d : u32;
|
||||
e : vec3<f32>;
|
||||
f : f32;
|
||||
g : mat2x3<f32>;
|
||||
h : mat3x2<f32>;
|
||||
i : Inner;
|
||||
j : [[stride(16)]] array<Inner, 4>;
|
||||
};
|
||||
|
||||
[[binding(0), group(0)]] var<storage, read> s : S;
|
||||
|
||||
[[stage(compute), workgroup_size(1)]]
|
||||
fn main() {
|
||||
let a = s.a;
|
||||
let b = s.b;
|
||||
let c = s.c;
|
||||
let d = s.d;
|
||||
let e = s.e;
|
||||
let f = s.f;
|
||||
let g = s.g;
|
||||
let h = s.h;
|
||||
let i = s.i;
|
||||
let j = s.j;
|
||||
}
|
|
@ -0,0 +1,42 @@
|
|||
struct Inner {
|
||||
int x;
|
||||
};
|
||||
struct tint_padded_array_element {
|
||||
Inner el;
|
||||
};
|
||||
|
||||
float2x3 tint_symbol_6(ByteAddressBuffer buffer, uint offset) {
|
||||
return float2x3(asfloat(buffer.Load3((offset + 0u))), asfloat(buffer.Load3((offset + 16u))));
|
||||
}
|
||||
|
||||
float3x2 tint_symbol_8(ByteAddressBuffer buffer, uint offset) {
|
||||
return float3x2(asfloat(buffer.Load2((offset + 0u))), asfloat(buffer.Load2((offset + 8u))), asfloat(buffer.Load2((offset + 16u))));
|
||||
}
|
||||
|
||||
Inner tint_symbol_9(ByteAddressBuffer buffer, uint offset) {
|
||||
const Inner tint_symbol_11 = {asint(buffer.Load((offset + 0u)))};
|
||||
return tint_symbol_11;
|
||||
}
|
||||
|
||||
typedef tint_padded_array_element tint_symbol_10_ret[4];
|
||||
tint_symbol_10_ret tint_symbol_10(ByteAddressBuffer buffer, uint offset) {
|
||||
const tint_padded_array_element tint_symbol_12[4] = {{tint_symbol_9(buffer, (offset + 0u))}, {tint_symbol_9(buffer, (offset + 16u))}, {tint_symbol_9(buffer, (offset + 32u))}, {tint_symbol_9(buffer, (offset + 48u))}};
|
||||
return tint_symbol_12;
|
||||
}
|
||||
|
||||
ByteAddressBuffer s : register(t0, space0);
|
||||
|
||||
[numthreads(1, 1, 1)]
|
||||
void main() {
|
||||
const int3 a = asint(s.Load3(0u));
|
||||
const int b = asint(s.Load(12u));
|
||||
const uint3 c = s.Load3(16u);
|
||||
const uint d = s.Load(28u);
|
||||
const float3 e = asfloat(s.Load3(32u));
|
||||
const float f = asfloat(s.Load(44u));
|
||||
const float2x3 g = tint_symbol_6(s, 48u);
|
||||
const float3x2 h = tint_symbol_8(s, 80u);
|
||||
const Inner i = tint_symbol_9(s, 104u);
|
||||
const tint_padded_array_element j[4] = tint_symbol_10(s, 108u);
|
||||
return;
|
||||
}
|
|
@ -0,0 +1,41 @@
|
|||
#include <metal_stdlib>
|
||||
|
||||
using namespace metal;
|
||||
struct Inner {
|
||||
/* 0x0000 */ int x;
|
||||
};
|
||||
struct tint_padded_array_element {
|
||||
/* 0x0000 */ Inner el;
|
||||
/* 0x0004 */ int8_t tint_pad[12];
|
||||
};
|
||||
struct tint_array_wrapper {
|
||||
/* 0x0000 */ tint_padded_array_element arr[4];
|
||||
};
|
||||
struct S {
|
||||
/* 0x0000 */ packed_int3 a;
|
||||
/* 0x000c */ int b;
|
||||
/* 0x0010 */ packed_uint3 c;
|
||||
/* 0x001c */ uint d;
|
||||
/* 0x0020 */ packed_float3 e;
|
||||
/* 0x002c */ float f;
|
||||
/* 0x0030 */ float2x3 g;
|
||||
/* 0x0050 */ float3x2 h;
|
||||
/* 0x0068 */ Inner i;
|
||||
/* 0x006c */ tint_array_wrapper j;
|
||||
/* 0x00ac */ int8_t tint_pad_1[4];
|
||||
};
|
||||
|
||||
kernel void tint_symbol(const device S& s [[buffer(0)]]) {
|
||||
int3 const a = s.a;
|
||||
int const b = s.b;
|
||||
uint3 const c = s.c;
|
||||
uint const d = s.d;
|
||||
float3 const e = s.e;
|
||||
float const f = s.f;
|
||||
float2x3 const g = s.g;
|
||||
float3x2 const h = s.h;
|
||||
Inner const i = s.i;
|
||||
tint_array_wrapper const j = s.j;
|
||||
return;
|
||||
}
|
||||
|
|
@ -0,0 +1,104 @@
|
|||
; SPIR-V
|
||||
; Version: 1.3
|
||||
; Generator: Google Tint Compiler; 0
|
||||
; Bound: 59
|
||||
; Schema: 0
|
||||
OpCapability Shader
|
||||
OpMemoryModel Logical GLSL450
|
||||
OpEntryPoint GLCompute %main "main"
|
||||
OpExecutionMode %main LocalSize 1 1 1
|
||||
OpName %S "S"
|
||||
OpMemberName %S 0 "a"
|
||||
OpMemberName %S 1 "b"
|
||||
OpMemberName %S 2 "c"
|
||||
OpMemberName %S 3 "d"
|
||||
OpMemberName %S 4 "e"
|
||||
OpMemberName %S 5 "f"
|
||||
OpMemberName %S 6 "g"
|
||||
OpMemberName %S 7 "h"
|
||||
OpMemberName %S 8 "i"
|
||||
OpName %Inner "Inner"
|
||||
OpMemberName %Inner 0 "x"
|
||||
OpMemberName %S 9 "j"
|
||||
OpName %s "s"
|
||||
OpName %main "main"
|
||||
OpDecorate %S Block
|
||||
OpMemberDecorate %S 0 Offset 0
|
||||
OpMemberDecorate %S 1 Offset 12
|
||||
OpMemberDecorate %S 2 Offset 16
|
||||
OpMemberDecorate %S 3 Offset 28
|
||||
OpMemberDecorate %S 4 Offset 32
|
||||
OpMemberDecorate %S 5 Offset 44
|
||||
OpMemberDecorate %S 6 Offset 48
|
||||
OpMemberDecorate %S 6 ColMajor
|
||||
OpMemberDecorate %S 6 MatrixStride 16
|
||||
OpMemberDecorate %S 7 Offset 80
|
||||
OpMemberDecorate %S 7 ColMajor
|
||||
OpMemberDecorate %S 7 MatrixStride 8
|
||||
OpMemberDecorate %S 8 Offset 104
|
||||
OpMemberDecorate %Inner 0 Offset 0
|
||||
OpMemberDecorate %S 9 Offset 108
|
||||
OpDecorate %_arr_Inner_uint_4 ArrayStride 16
|
||||
OpDecorate %s NonWritable
|
||||
OpDecorate %s Binding 0
|
||||
OpDecorate %s DescriptorSet 0
|
||||
%int = OpTypeInt 32 1
|
||||
%v3int = OpTypeVector %int 3
|
||||
%uint = OpTypeInt 32 0
|
||||
%v3uint = OpTypeVector %uint 3
|
||||
%float = OpTypeFloat 32
|
||||
%v3float = OpTypeVector %float 3
|
||||
%mat2v3float = OpTypeMatrix %v3float 2
|
||||
%v2float = OpTypeVector %float 2
|
||||
%mat3v2float = OpTypeMatrix %v2float 3
|
||||
%Inner = OpTypeStruct %int
|
||||
%uint_4 = OpConstant %uint 4
|
||||
%_arr_Inner_uint_4 = OpTypeArray %Inner %uint_4
|
||||
%S = OpTypeStruct %v3int %int %v3uint %uint %v3float %float %mat2v3float %mat3v2float %Inner %_arr_Inner_uint_4
|
||||
%_ptr_StorageBuffer_S = OpTypePointer StorageBuffer %S
|
||||
%s = OpVariable %_ptr_StorageBuffer_S StorageBuffer
|
||||
%void = OpTypeVoid
|
||||
%16 = OpTypeFunction %void
|
||||
%uint_0 = OpConstant %uint 0
|
||||
%_ptr_StorageBuffer_v3int = OpTypePointer StorageBuffer %v3int
|
||||
%uint_1 = OpConstant %uint 1
|
||||
%_ptr_StorageBuffer_int = OpTypePointer StorageBuffer %int
|
||||
%uint_2 = OpConstant %uint 2
|
||||
%_ptr_StorageBuffer_v3uint = OpTypePointer StorageBuffer %v3uint
|
||||
%uint_3 = OpConstant %uint 3
|
||||
%_ptr_StorageBuffer_uint = OpTypePointer StorageBuffer %uint
|
||||
%_ptr_StorageBuffer_v3float = OpTypePointer StorageBuffer %v3float
|
||||
%uint_5 = OpConstant %uint 5
|
||||
%_ptr_StorageBuffer_float = OpTypePointer StorageBuffer %float
|
||||
%uint_6 = OpConstant %uint 6
|
||||
%_ptr_StorageBuffer_mat2v3float = OpTypePointer StorageBuffer %mat2v3float
|
||||
%uint_7 = OpConstant %uint 7
|
||||
%_ptr_StorageBuffer_mat3v2float = OpTypePointer StorageBuffer %mat3v2float
|
||||
%uint_8 = OpConstant %uint 8
|
||||
%_ptr_StorageBuffer_Inner = OpTypePointer StorageBuffer %Inner
|
||||
%uint_9 = OpConstant %uint 9
|
||||
%_ptr_StorageBuffer__arr_Inner_uint_4 = OpTypePointer StorageBuffer %_arr_Inner_uint_4
|
||||
%main = OpFunction %void None %16
|
||||
%19 = OpLabel
|
||||
%22 = OpAccessChain %_ptr_StorageBuffer_v3int %s %uint_0
|
||||
%23 = OpLoad %v3int %22
|
||||
%26 = OpAccessChain %_ptr_StorageBuffer_int %s %uint_1
|
||||
%27 = OpLoad %int %26
|
||||
%30 = OpAccessChain %_ptr_StorageBuffer_v3uint %s %uint_2
|
||||
%31 = OpLoad %v3uint %30
|
||||
%34 = OpAccessChain %_ptr_StorageBuffer_uint %s %uint_3
|
||||
%35 = OpLoad %uint %34
|
||||
%37 = OpAccessChain %_ptr_StorageBuffer_v3float %s %uint_4
|
||||
%38 = OpLoad %v3float %37
|
||||
%41 = OpAccessChain %_ptr_StorageBuffer_float %s %uint_5
|
||||
%42 = OpLoad %float %41
|
||||
%45 = OpAccessChain %_ptr_StorageBuffer_mat2v3float %s %uint_6
|
||||
%46 = OpLoad %mat2v3float %45
|
||||
%49 = OpAccessChain %_ptr_StorageBuffer_mat3v2float %s %uint_7
|
||||
%50 = OpLoad %mat3v2float %49
|
||||
%53 = OpAccessChain %_ptr_StorageBuffer_Inner %s %uint_8
|
||||
%54 = OpLoad %Inner %53
|
||||
%57 = OpAccessChain %_ptr_StorageBuffer__arr_Inner_uint_4 %s %uint_9
|
||||
%58 = OpLoad %_arr_Inner_uint_4 %57
|
||||
OpReturn
|
||||
OpFunctionEnd
|
|
@ -0,0 +1,33 @@
|
|||
struct Inner {
|
||||
x : i32;
|
||||
};
|
||||
|
||||
[[block]]
|
||||
struct S {
|
||||
a : vec3<i32>;
|
||||
b : i32;
|
||||
c : vec3<u32>;
|
||||
d : u32;
|
||||
e : vec3<f32>;
|
||||
f : f32;
|
||||
g : mat2x3<f32>;
|
||||
h : mat3x2<f32>;
|
||||
i : Inner;
|
||||
j : [[stride(16)]] array<Inner, 4>;
|
||||
};
|
||||
|
||||
[[binding(0), group(0)]] var<storage, read> s : S;
|
||||
|
||||
[[stage(compute), workgroup_size(1)]]
|
||||
fn main() {
|
||||
let a = s.a;
|
||||
let b = s.b;
|
||||
let c = s.c;
|
||||
let d = s.d;
|
||||
let e = s.e;
|
||||
let f = s.f;
|
||||
let g = s.g;
|
||||
let h = s.h;
|
||||
let i = s.i;
|
||||
let j = s.j;
|
||||
}
|
|
@ -0,0 +1,33 @@
|
|||
struct Inner {
|
||||
x : i32;
|
||||
};
|
||||
|
||||
[[block]]
|
||||
struct S {
|
||||
a : vec3<i32>;
|
||||
b : i32;
|
||||
c : vec3<u32>;
|
||||
d : u32;
|
||||
e : vec3<f32>;
|
||||
f : f32;
|
||||
g : mat2x3<f32>;
|
||||
h : mat3x2<f32>;
|
||||
i : Inner;
|
||||
j : [[stride(16)]] array<Inner, 4>;
|
||||
};
|
||||
|
||||
[[binding(0), group(0)]] var<storage, write> s : S;
|
||||
|
||||
[[stage(compute), workgroup_size(1)]]
|
||||
fn main() {
|
||||
s.a = vec3<i32>();
|
||||
s.b = i32();
|
||||
s.c = vec3<u32>();
|
||||
s.d = u32();
|
||||
s.e = vec3<f32>();
|
||||
s.f = f32();
|
||||
s.g = mat2x3<f32>();
|
||||
s.h = mat3x2<f32>();
|
||||
s.i = Inner();
|
||||
s.j = [[stride(16)]] array<Inner, 4>();
|
||||
}
|
|
@ -0,0 +1,47 @@
|
|||
struct Inner {
|
||||
int x;
|
||||
};
|
||||
struct tint_padded_array_element {
|
||||
Inner el;
|
||||
};
|
||||
|
||||
void tint_symbol_6(RWByteAddressBuffer buffer, uint offset, float2x3 value) {
|
||||
buffer.Store3((offset + 0u), asuint(value[0u]));
|
||||
buffer.Store3((offset + 16u), asuint(value[1u]));
|
||||
}
|
||||
|
||||
void tint_symbol_8(RWByteAddressBuffer buffer, uint offset, float3x2 value) {
|
||||
buffer.Store2((offset + 0u), asuint(value[0u]));
|
||||
buffer.Store2((offset + 8u), asuint(value[1u]));
|
||||
buffer.Store2((offset + 16u), asuint(value[2u]));
|
||||
}
|
||||
|
||||
void tint_symbol_9(RWByteAddressBuffer buffer, uint offset, Inner value) {
|
||||
buffer.Store((offset + 0u), asuint(value.x));
|
||||
}
|
||||
|
||||
void tint_symbol_10(RWByteAddressBuffer buffer, uint offset, tint_padded_array_element value[4]) {
|
||||
tint_symbol_9(buffer, (offset + 0u), value[0u].el);
|
||||
tint_symbol_9(buffer, (offset + 16u), value[1u].el);
|
||||
tint_symbol_9(buffer, (offset + 32u), value[2u].el);
|
||||
tint_symbol_9(buffer, (offset + 48u), value[3u].el);
|
||||
}
|
||||
|
||||
RWByteAddressBuffer s : register(u0, space0);
|
||||
|
||||
[numthreads(1, 1, 1)]
|
||||
void main() {
|
||||
s.Store3(0u, asuint(int3(0, 0, 0)));
|
||||
s.Store(12u, asuint(0));
|
||||
s.Store3(16u, asuint(uint3(0u, 0u, 0u)));
|
||||
s.Store(28u, asuint(0u));
|
||||
s.Store3(32u, asuint(float3(0.0f, 0.0f, 0.0f)));
|
||||
s.Store(44u, asuint(0.0f));
|
||||
tint_symbol_6(s, 48u, float2x3(0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f));
|
||||
tint_symbol_8(s, 80u, float3x2(0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f));
|
||||
const Inner tint_symbol_11 = (Inner)0;
|
||||
tint_symbol_9(s, 104u, tint_symbol_11);
|
||||
const tint_padded_array_element tint_symbol_12[4] = (tint_padded_array_element[4])0;
|
||||
tint_symbol_10(s, 108u, tint_symbol_12);
|
||||
return;
|
||||
}
|
|
@ -0,0 +1,43 @@
|
|||
#include <metal_stdlib>
|
||||
|
||||
using namespace metal;
|
||||
struct Inner {
|
||||
/* 0x0000 */ int x;
|
||||
};
|
||||
struct tint_padded_array_element {
|
||||
/* 0x0000 */ Inner el;
|
||||
/* 0x0004 */ int8_t tint_pad[12];
|
||||
};
|
||||
struct tint_array_wrapper {
|
||||
/* 0x0000 */ tint_padded_array_element arr[4];
|
||||
};
|
||||
struct S {
|
||||
/* 0x0000 */ packed_int3 a;
|
||||
/* 0x000c */ int b;
|
||||
/* 0x0010 */ packed_uint3 c;
|
||||
/* 0x001c */ uint d;
|
||||
/* 0x0020 */ packed_float3 e;
|
||||
/* 0x002c */ float f;
|
||||
/* 0x0030 */ float2x3 g;
|
||||
/* 0x0050 */ float3x2 h;
|
||||
/* 0x0068 */ Inner i;
|
||||
/* 0x006c */ tint_array_wrapper j;
|
||||
/* 0x00ac */ int8_t tint_pad_1[4];
|
||||
};
|
||||
|
||||
kernel void tint_symbol(device S& s [[buffer(0)]]) {
|
||||
s.a = int3();
|
||||
s.b = int();
|
||||
s.c = uint3();
|
||||
s.d = uint();
|
||||
s.e = float3();
|
||||
s.f = float();
|
||||
s.g = float2x3();
|
||||
s.h = float3x2();
|
||||
Inner const tint_symbol_1 = {};
|
||||
s.i = tint_symbol_1;
|
||||
tint_array_wrapper const tint_symbol_2 = {.arr={}};
|
||||
s.j = tint_symbol_2;
|
||||
return;
|
||||
}
|
||||
|
|
@ -0,0 +1,114 @@
|
|||
; SPIR-V
|
||||
; Version: 1.3
|
||||
; Generator: Google Tint Compiler; 0
|
||||
; Bound: 59
|
||||
; Schema: 0
|
||||
OpCapability Shader
|
||||
OpMemoryModel Logical GLSL450
|
||||
OpEntryPoint GLCompute %main "main"
|
||||
OpExecutionMode %main LocalSize 1 1 1
|
||||
OpName %S "S"
|
||||
OpMemberName %S 0 "a"
|
||||
OpMemberName %S 1 "b"
|
||||
OpMemberName %S 2 "c"
|
||||
OpMemberName %S 3 "d"
|
||||
OpMemberName %S 4 "e"
|
||||
OpMemberName %S 5 "f"
|
||||
OpMemberName %S 6 "g"
|
||||
OpMemberName %S 7 "h"
|
||||
OpMemberName %S 8 "i"
|
||||
OpName %Inner "Inner"
|
||||
OpMemberName %Inner 0 "x"
|
||||
OpMemberName %S 9 "j"
|
||||
OpName %s "s"
|
||||
OpName %main "main"
|
||||
OpDecorate %S Block
|
||||
OpMemberDecorate %S 0 Offset 0
|
||||
OpMemberDecorate %S 1 Offset 12
|
||||
OpMemberDecorate %S 2 Offset 16
|
||||
OpMemberDecorate %S 3 Offset 28
|
||||
OpMemberDecorate %S 4 Offset 32
|
||||
OpMemberDecorate %S 5 Offset 44
|
||||
OpMemberDecorate %S 6 Offset 48
|
||||
OpMemberDecorate %S 6 ColMajor
|
||||
OpMemberDecorate %S 6 MatrixStride 16
|
||||
OpMemberDecorate %S 7 Offset 80
|
||||
OpMemberDecorate %S 7 ColMajor
|
||||
OpMemberDecorate %S 7 MatrixStride 8
|
||||
OpMemberDecorate %S 8 Offset 104
|
||||
OpMemberDecorate %Inner 0 Offset 0
|
||||
OpMemberDecorate %S 9 Offset 108
|
||||
OpDecorate %_arr_Inner_uint_4 ArrayStride 16
|
||||
OpDecorate %s NonReadable
|
||||
OpDecorate %s Binding 0
|
||||
OpDecorate %s DescriptorSet 0
|
||||
%int = OpTypeInt 32 1
|
||||
%v3int = OpTypeVector %int 3
|
||||
%uint = OpTypeInt 32 0
|
||||
%v3uint = OpTypeVector %uint 3
|
||||
%float = OpTypeFloat 32
|
||||
%v3float = OpTypeVector %float 3
|
||||
%mat2v3float = OpTypeMatrix %v3float 2
|
||||
%v2float = OpTypeVector %float 2
|
||||
%mat3v2float = OpTypeMatrix %v2float 3
|
||||
%Inner = OpTypeStruct %int
|
||||
%uint_4 = OpConstant %uint 4
|
||||
%_arr_Inner_uint_4 = OpTypeArray %Inner %uint_4
|
||||
%S = OpTypeStruct %v3int %int %v3uint %uint %v3float %float %mat2v3float %mat3v2float %Inner %_arr_Inner_uint_4
|
||||
%_ptr_StorageBuffer_S = OpTypePointer StorageBuffer %S
|
||||
%s = OpVariable %_ptr_StorageBuffer_S StorageBuffer
|
||||
%void = OpTypeVoid
|
||||
%16 = OpTypeFunction %void
|
||||
%uint_0 = OpConstant %uint 0
|
||||
%_ptr_StorageBuffer_v3int = OpTypePointer StorageBuffer %v3int
|
||||
%23 = OpConstantNull %v3int
|
||||
%uint_1 = OpConstant %uint 1
|
||||
%_ptr_StorageBuffer_int = OpTypePointer StorageBuffer %int
|
||||
%27 = OpConstantNull %int
|
||||
%uint_2 = OpConstant %uint 2
|
||||
%_ptr_StorageBuffer_v3uint = OpTypePointer StorageBuffer %v3uint
|
||||
%31 = OpConstantNull %v3uint
|
||||
%uint_3 = OpConstant %uint 3
|
||||
%_ptr_StorageBuffer_uint = OpTypePointer StorageBuffer %uint
|
||||
%35 = OpConstantNull %uint
|
||||
%_ptr_StorageBuffer_v3float = OpTypePointer StorageBuffer %v3float
|
||||
%38 = OpConstantNull %v3float
|
||||
%uint_5 = OpConstant %uint 5
|
||||
%_ptr_StorageBuffer_float = OpTypePointer StorageBuffer %float
|
||||
%42 = OpConstantNull %float
|
||||
%uint_6 = OpConstant %uint 6
|
||||
%_ptr_StorageBuffer_mat2v3float = OpTypePointer StorageBuffer %mat2v3float
|
||||
%46 = OpConstantNull %mat2v3float
|
||||
%uint_7 = OpConstant %uint 7
|
||||
%_ptr_StorageBuffer_mat3v2float = OpTypePointer StorageBuffer %mat3v2float
|
||||
%50 = OpConstantNull %mat3v2float
|
||||
%uint_8 = OpConstant %uint 8
|
||||
%_ptr_StorageBuffer_Inner = OpTypePointer StorageBuffer %Inner
|
||||
%54 = OpConstantNull %Inner
|
||||
%uint_9 = OpConstant %uint 9
|
||||
%_ptr_StorageBuffer__arr_Inner_uint_4 = OpTypePointer StorageBuffer %_arr_Inner_uint_4
|
||||
%58 = OpConstantNull %_arr_Inner_uint_4
|
||||
%main = OpFunction %void None %16
|
||||
%19 = OpLabel
|
||||
%22 = OpAccessChain %_ptr_StorageBuffer_v3int %s %uint_0
|
||||
OpStore %22 %23
|
||||
%26 = OpAccessChain %_ptr_StorageBuffer_int %s %uint_1
|
||||
OpStore %26 %27
|
||||
%30 = OpAccessChain %_ptr_StorageBuffer_v3uint %s %uint_2
|
||||
OpStore %30 %31
|
||||
%34 = OpAccessChain %_ptr_StorageBuffer_uint %s %uint_3
|
||||
OpStore %34 %35
|
||||
%37 = OpAccessChain %_ptr_StorageBuffer_v3float %s %uint_4
|
||||
OpStore %37 %38
|
||||
%41 = OpAccessChain %_ptr_StorageBuffer_float %s %uint_5
|
||||
OpStore %41 %42
|
||||
%45 = OpAccessChain %_ptr_StorageBuffer_mat2v3float %s %uint_6
|
||||
OpStore %45 %46
|
||||
%49 = OpAccessChain %_ptr_StorageBuffer_mat3v2float %s %uint_7
|
||||
OpStore %49 %50
|
||||
%53 = OpAccessChain %_ptr_StorageBuffer_Inner %s %uint_8
|
||||
OpStore %53 %54
|
||||
%57 = OpAccessChain %_ptr_StorageBuffer__arr_Inner_uint_4 %s %uint_9
|
||||
OpStore %57 %58
|
||||
OpReturn
|
||||
OpFunctionEnd
|
|
@ -0,0 +1,33 @@
|
|||
struct Inner {
|
||||
x : i32;
|
||||
};
|
||||
|
||||
[[block]]
|
||||
struct S {
|
||||
a : vec3<i32>;
|
||||
b : i32;
|
||||
c : vec3<u32>;
|
||||
d : u32;
|
||||
e : vec3<f32>;
|
||||
f : f32;
|
||||
g : mat2x3<f32>;
|
||||
h : mat3x2<f32>;
|
||||
i : Inner;
|
||||
j : [[stride(16)]] array<Inner, 4>;
|
||||
};
|
||||
|
||||
[[binding(0), group(0)]] var<storage, write> s : S;
|
||||
|
||||
[[stage(compute), workgroup_size(1)]]
|
||||
fn main() {
|
||||
s.a = vec3<i32>();
|
||||
s.b = i32();
|
||||
s.c = vec3<u32>();
|
||||
s.d = u32();
|
||||
s.e = vec3<f32>();
|
||||
s.f = f32();
|
||||
s.g = mat2x3<f32>();
|
||||
s.h = mat3x2<f32>();
|
||||
s.i = Inner();
|
||||
s.j = [[stride(16)]] array<Inner, 4>();
|
||||
}
|
|
@ -0,0 +1,33 @@
|
|||
struct Inner {
|
||||
a : vec3<i32>;
|
||||
b : i32;
|
||||
c : vec3<u32>;
|
||||
d : u32;
|
||||
e : vec3<f32>;
|
||||
f : f32;
|
||||
g : vec2<i32>;
|
||||
h : vec2<i32>;
|
||||
i : mat2x3<f32>;
|
||||
[[align(16)]] j : mat3x2<f32>;
|
||||
[[align(16)]] k : [[stride(16)]] array<vec4<i32>, 4>;
|
||||
};
|
||||
|
||||
[[block]]
|
||||
struct S {
|
||||
arr : array<Inner, 8>;
|
||||
};
|
||||
|
||||
[[binding(0), group(0)]] var<uniform> s : S;
|
||||
|
||||
[[stage(compute), workgroup_size(1)]]
|
||||
fn main([[builtin(local_invocation_index)]] idx : u32) {
|
||||
let a = s.arr[idx].a;
|
||||
let b = s.arr[idx].b;
|
||||
let c = s.arr[idx].c;
|
||||
let d = s.arr[idx].d;
|
||||
let e = s.arr[idx].e;
|
||||
let f = s.arr[idx].f;
|
||||
let g = s.arr[idx].g;
|
||||
let h = s.arr[idx].h;
|
||||
let i = s.arr[idx].i;
|
||||
}
|
|
@ -0,0 +1,38 @@
|
|||
float2x3 tint_symbol_9(uint4 buffer[96], uint offset) {
|
||||
const uint scalar_offset = ((offset + 0u)) / 4;
|
||||
const uint scalar_offset_1 = ((offset + 16u)) / 4;
|
||||
return float2x3(asfloat(buffer[scalar_offset / 4].xyz), asfloat(buffer[scalar_offset_1 / 4].xyz));
|
||||
}
|
||||
|
||||
cbuffer cbuffer_s : register(b0, space0) {
|
||||
uint4 s[96];
|
||||
};
|
||||
|
||||
struct tint_symbol_1 {
|
||||
uint idx : SV_GroupIndex;
|
||||
};
|
||||
|
||||
[numthreads(1, 1, 1)]
|
||||
void main(tint_symbol_1 tint_symbol) {
|
||||
const uint idx = tint_symbol.idx;
|
||||
const uint scalar_offset_2 = ((192u * idx)) / 4;
|
||||
const int3 a = asint(s[scalar_offset_2 / 4].xyz);
|
||||
const uint scalar_offset_3 = (((192u * idx) + 12u)) / 4;
|
||||
const int b = asint(s[scalar_offset_3 / 4][scalar_offset_3 % 4]);
|
||||
const uint scalar_offset_4 = (((192u * idx) + 16u)) / 4;
|
||||
const uint3 c = s[scalar_offset_4 / 4].xyz;
|
||||
const uint scalar_offset_5 = (((192u * idx) + 28u)) / 4;
|
||||
const uint d = s[scalar_offset_5 / 4][scalar_offset_5 % 4];
|
||||
const uint scalar_offset_6 = (((192u * idx) + 32u)) / 4;
|
||||
const float3 e = asfloat(s[scalar_offset_6 / 4].xyz);
|
||||
const uint scalar_offset_7 = (((192u * idx) + 44u)) / 4;
|
||||
const float f = asfloat(s[scalar_offset_7 / 4][scalar_offset_7 % 4]);
|
||||
const uint scalar_offset_8 = (((192u * idx) + 48u)) / 4;
|
||||
uint4 ubo_load = s[scalar_offset_8 / 4];
|
||||
const int2 g = asint(((scalar_offset_8 & 2) ? ubo_load.zw : ubo_load.xy));
|
||||
const uint scalar_offset_9 = (((192u * idx) + 56u)) / 4;
|
||||
uint4 ubo_load_1 = s[scalar_offset_9 / 4];
|
||||
const int2 h = asint(((scalar_offset_9 & 2) ? ubo_load_1.zw : ubo_load_1.xy));
|
||||
const float2x3 i = tint_symbol_9(s, ((192u * idx) + 64u));
|
||||
return;
|
||||
}
|
|
@ -0,0 +1,40 @@
|
|||
#include <metal_stdlib>
|
||||
|
||||
using namespace metal;
|
||||
struct tint_array_wrapper {
|
||||
/* 0x0000 */ int4 arr[4];
|
||||
};
|
||||
struct Inner {
|
||||
/* 0x0000 */ packed_int3 a;
|
||||
/* 0x000c */ int b;
|
||||
/* 0x0010 */ packed_uint3 c;
|
||||
/* 0x001c */ uint d;
|
||||
/* 0x0020 */ packed_float3 e;
|
||||
/* 0x002c */ float f;
|
||||
/* 0x0030 */ packed_int2 g;
|
||||
/* 0x0038 */ packed_int2 h;
|
||||
/* 0x0040 */ float2x3 i;
|
||||
/* 0x0060 */ float3x2 j;
|
||||
/* 0x0078 */ int8_t tint_pad[8];
|
||||
/* 0x0080 */ tint_array_wrapper k;
|
||||
};
|
||||
struct tint_array_wrapper_1 {
|
||||
/* 0x0000 */ Inner arr[8];
|
||||
};
|
||||
struct S {
|
||||
/* 0x0000 */ tint_array_wrapper_1 arr;
|
||||
};
|
||||
|
||||
kernel void tint_symbol(uint idx [[thread_index_in_threadgroup]], constant S& s [[buffer(0)]]) {
|
||||
int3 const a = s.arr.arr[idx].a;
|
||||
int const b = s.arr.arr[idx].b;
|
||||
uint3 const c = s.arr.arr[idx].c;
|
||||
uint const d = s.arr.arr[idx].d;
|
||||
float3 const e = s.arr.arr[idx].e;
|
||||
float const f = s.arr.arr[idx].f;
|
||||
int2 const g = s.arr.arr[idx].g;
|
||||
int2 const h = s.arr.arr[idx].h;
|
||||
float2x3 const i = s.arr.arr[idx].i;
|
||||
return;
|
||||
}
|
||||
|
|
@ -0,0 +1,118 @@
|
|||
; SPIR-V
|
||||
; Version: 1.3
|
||||
; Generator: Google Tint Compiler; 0
|
||||
; Bound: 68
|
||||
; Schema: 0
|
||||
OpCapability Shader
|
||||
OpMemoryModel Logical GLSL450
|
||||
OpEntryPoint GLCompute %main "main" %tint_symbol
|
||||
OpExecutionMode %main LocalSize 1 1 1
|
||||
OpName %S "S"
|
||||
OpMemberName %S 0 "arr"
|
||||
OpName %Inner "Inner"
|
||||
OpMemberName %Inner 0 "a"
|
||||
OpMemberName %Inner 1 "b"
|
||||
OpMemberName %Inner 2 "c"
|
||||
OpMemberName %Inner 3 "d"
|
||||
OpMemberName %Inner 4 "e"
|
||||
OpMemberName %Inner 5 "f"
|
||||
OpMemberName %Inner 6 "g"
|
||||
OpMemberName %Inner 7 "h"
|
||||
OpMemberName %Inner 8 "i"
|
||||
OpMemberName %Inner 9 "j"
|
||||
OpMemberName %Inner 10 "k"
|
||||
OpName %s "s"
|
||||
OpName %tint_symbol "tint_symbol"
|
||||
OpName %main "main"
|
||||
OpDecorate %S Block
|
||||
OpMemberDecorate %S 0 Offset 0
|
||||
OpMemberDecorate %Inner 0 Offset 0
|
||||
OpMemberDecorate %Inner 1 Offset 12
|
||||
OpMemberDecorate %Inner 2 Offset 16
|
||||
OpMemberDecorate %Inner 3 Offset 28
|
||||
OpMemberDecorate %Inner 4 Offset 32
|
||||
OpMemberDecorate %Inner 5 Offset 44
|
||||
OpMemberDecorate %Inner 6 Offset 48
|
||||
OpMemberDecorate %Inner 7 Offset 56
|
||||
OpMemberDecorate %Inner 8 Offset 64
|
||||
OpMemberDecorate %Inner 8 ColMajor
|
||||
OpMemberDecorate %Inner 8 MatrixStride 16
|
||||
OpMemberDecorate %Inner 9 Offset 96
|
||||
OpMemberDecorate %Inner 9 ColMajor
|
||||
OpMemberDecorate %Inner 9 MatrixStride 8
|
||||
OpMemberDecorate %Inner 10 Offset 128
|
||||
OpDecorate %_arr_v4int_uint_4 ArrayStride 16
|
||||
OpDecorate %_arr_Inner_uint_8 ArrayStride 192
|
||||
OpDecorate %s NonWritable
|
||||
OpDecorate %s Binding 0
|
||||
OpDecorate %s DescriptorSet 0
|
||||
OpDecorate %tint_symbol BuiltIn LocalInvocationIndex
|
||||
%int = OpTypeInt 32 1
|
||||
%v3int = OpTypeVector %int 3
|
||||
%uint = OpTypeInt 32 0
|
||||
%v3uint = OpTypeVector %uint 3
|
||||
%float = OpTypeFloat 32
|
||||
%v3float = OpTypeVector %float 3
|
||||
%v2int = OpTypeVector %int 2
|
||||
%mat2v3float = OpTypeMatrix %v3float 2
|
||||
%v2float = OpTypeVector %float 2
|
||||
%mat3v2float = OpTypeMatrix %v2float 3
|
||||
%v4int = OpTypeVector %int 4
|
||||
%uint_4 = OpConstant %uint 4
|
||||
%_arr_v4int_uint_4 = OpTypeArray %v4int %uint_4
|
||||
%Inner = OpTypeStruct %v3int %int %v3uint %uint %v3float %float %v2int %v2int %mat2v3float %mat3v2float %_arr_v4int_uint_4
|
||||
%uint_8 = OpConstant %uint 8
|
||||
%_arr_Inner_uint_8 = OpTypeArray %Inner %uint_8
|
||||
%S = OpTypeStruct %_arr_Inner_uint_8
|
||||
%_ptr_Uniform_S = OpTypePointer Uniform %S
|
||||
%s = OpVariable %_ptr_Uniform_S Uniform
|
||||
%_ptr_Input_uint = OpTypePointer Input %uint
|
||||
%tint_symbol = OpVariable %_ptr_Input_uint Input
|
||||
%void = OpTypeVoid
|
||||
%22 = OpTypeFunction %void
|
||||
%uint_0 = OpConstant %uint 0
|
||||
%_ptr_Uniform_v3int = OpTypePointer Uniform %v3int
|
||||
%uint_1 = OpConstant %uint 1
|
||||
%_ptr_Uniform_int = OpTypePointer Uniform %int
|
||||
%uint_2 = OpConstant %uint 2
|
||||
%_ptr_Uniform_v3uint = OpTypePointer Uniform %v3uint
|
||||
%uint_3 = OpConstant %uint 3
|
||||
%_ptr_Uniform_uint = OpTypePointer Uniform %uint
|
||||
%_ptr_Uniform_v3float = OpTypePointer Uniform %v3float
|
||||
%uint_5 = OpConstant %uint 5
|
||||
%_ptr_Uniform_float = OpTypePointer Uniform %float
|
||||
%uint_6 = OpConstant %uint 6
|
||||
%_ptr_Uniform_v2int = OpTypePointer Uniform %v2int
|
||||
%uint_7 = OpConstant %uint 7
|
||||
%_ptr_Uniform_mat2v3float = OpTypePointer Uniform %mat2v3float
|
||||
%main = OpFunction %void None %22
|
||||
%25 = OpLabel
|
||||
%27 = OpLoad %uint %tint_symbol
|
||||
%29 = OpAccessChain %_ptr_Uniform_v3int %s %uint_0 %27 %uint_0
|
||||
%30 = OpLoad %v3int %29
|
||||
%31 = OpLoad %uint %tint_symbol
|
||||
%34 = OpAccessChain %_ptr_Uniform_int %s %uint_0 %31 %uint_1
|
||||
%35 = OpLoad %int %34
|
||||
%36 = OpLoad %uint %tint_symbol
|
||||
%39 = OpAccessChain %_ptr_Uniform_v3uint %s %uint_0 %36 %uint_2
|
||||
%40 = OpLoad %v3uint %39
|
||||
%41 = OpLoad %uint %tint_symbol
|
||||
%44 = OpAccessChain %_ptr_Uniform_uint %s %uint_0 %41 %uint_3
|
||||
%45 = OpLoad %uint %44
|
||||
%46 = OpLoad %uint %tint_symbol
|
||||
%48 = OpAccessChain %_ptr_Uniform_v3float %s %uint_0 %46 %uint_4
|
||||
%49 = OpLoad %v3float %48
|
||||
%50 = OpLoad %uint %tint_symbol
|
||||
%53 = OpAccessChain %_ptr_Uniform_float %s %uint_0 %50 %uint_5
|
||||
%54 = OpLoad %float %53
|
||||
%55 = OpLoad %uint %tint_symbol
|
||||
%58 = OpAccessChain %_ptr_Uniform_v2int %s %uint_0 %55 %uint_6
|
||||
%59 = OpLoad %v2int %58
|
||||
%60 = OpLoad %uint %tint_symbol
|
||||
%62 = OpAccessChain %_ptr_Uniform_v2int %s %uint_0 %60 %uint_7
|
||||
%63 = OpLoad %v2int %62
|
||||
%64 = OpLoad %uint %tint_symbol
|
||||
%66 = OpAccessChain %_ptr_Uniform_mat2v3float %s %uint_0 %64 %uint_8
|
||||
%67 = OpLoad %mat2v3float %66
|
||||
OpReturn
|
||||
OpFunctionEnd
|
|
@ -0,0 +1,35 @@
|
|||
struct Inner {
|
||||
a : vec3<i32>;
|
||||
b : i32;
|
||||
c : vec3<u32>;
|
||||
d : u32;
|
||||
e : vec3<f32>;
|
||||
f : f32;
|
||||
g : vec2<i32>;
|
||||
h : vec2<i32>;
|
||||
i : mat2x3<f32>;
|
||||
[[align(16)]]
|
||||
j : mat3x2<f32>;
|
||||
[[align(16)]]
|
||||
k : [[stride(16)]] array<vec4<i32>, 4>;
|
||||
};
|
||||
|
||||
[[block]]
|
||||
struct S {
|
||||
arr : array<Inner, 8>;
|
||||
};
|
||||
|
||||
[[binding(0), group(0)]] var<uniform> s : S;
|
||||
|
||||
[[stage(compute), workgroup_size(1)]]
|
||||
fn main([[builtin(local_invocation_index)]] idx : u32) {
|
||||
let a = s.arr[idx].a;
|
||||
let b = s.arr[idx].b;
|
||||
let c = s.arr[idx].c;
|
||||
let d = s.arr[idx].d;
|
||||
let e = s.arr[idx].e;
|
||||
let f = s.arr[idx].f;
|
||||
let g = s.arr[idx].g;
|
||||
let h = s.arr[idx].h;
|
||||
let i = s.arr[idx].i;
|
||||
}
|
|
@ -0,0 +1,37 @@
|
|||
struct Inner {
|
||||
x : i32;
|
||||
};
|
||||
|
||||
[[block]]
|
||||
struct S {
|
||||
a : vec3<i32>;
|
||||
b : i32;
|
||||
c : vec3<u32>;
|
||||
d : u32;
|
||||
e : vec3<f32>;
|
||||
f : f32;
|
||||
g : vec2<i32>;
|
||||
h : vec2<i32>;
|
||||
i : mat2x3<f32>;
|
||||
j : mat3x2<f32>;
|
||||
[[align(16)]] k : Inner;
|
||||
[[align(16)]] l : [[stride(16)]] array<Inner, 4>;
|
||||
};
|
||||
|
||||
[[binding(0), group(0)]] var<uniform> s : S;
|
||||
|
||||
[[stage(compute), workgroup_size(1)]]
|
||||
fn main() {
|
||||
let a = s.a;
|
||||
let b = s.b;
|
||||
let c = s.c;
|
||||
let d = s.d;
|
||||
let e = s.e;
|
||||
let f = s.f;
|
||||
let g = s.g;
|
||||
let h = s.h;
|
||||
let i = s.i;
|
||||
let j = s.j;
|
||||
let k = s.k;
|
||||
let l = s.l;
|
||||
}
|
|
@ -0,0 +1,55 @@
|
|||
struct Inner {
|
||||
int x;
|
||||
};
|
||||
struct tint_padded_array_element {
|
||||
Inner el;
|
||||
};
|
||||
|
||||
float2x3 tint_symbol_7(uint4 buffer[13], uint offset) {
|
||||
const uint scalar_offset = ((offset + 0u)) / 4;
|
||||
const uint scalar_offset_1 = ((offset + 16u)) / 4;
|
||||
return float2x3(asfloat(buffer[scalar_offset / 4].xyz), asfloat(buffer[scalar_offset_1 / 4].xyz));
|
||||
}
|
||||
|
||||
float3x2 tint_symbol_9(uint4 buffer[13], uint offset) {
|
||||
const uint scalar_offset_2 = ((offset + 0u)) / 4;
|
||||
uint4 ubo_load = buffer[scalar_offset_2 / 4];
|
||||
const uint scalar_offset_3 = ((offset + 8u)) / 4;
|
||||
uint4 ubo_load_1 = buffer[scalar_offset_3 / 4];
|
||||
const uint scalar_offset_4 = ((offset + 16u)) / 4;
|
||||
uint4 ubo_load_2 = buffer[scalar_offset_4 / 4];
|
||||
return float3x2(asfloat(((scalar_offset_2 & 2) ? ubo_load.zw : ubo_load.xy)), asfloat(((scalar_offset_3 & 2) ? ubo_load_1.zw : ubo_load_1.xy)), asfloat(((scalar_offset_4 & 2) ? ubo_load_2.zw : ubo_load_2.xy)));
|
||||
}
|
||||
|
||||
Inner tint_symbol_10(uint4 buffer[13], uint offset) {
|
||||
const uint scalar_offset_5 = ((offset + 0u)) / 4;
|
||||
const Inner tint_symbol_12 = {asint(buffer[scalar_offset_5 / 4][scalar_offset_5 % 4])};
|
||||
return tint_symbol_12;
|
||||
}
|
||||
|
||||
typedef tint_padded_array_element tint_symbol_11_ret[4];
|
||||
tint_symbol_11_ret tint_symbol_11(uint4 buffer[13], uint offset) {
|
||||
const tint_padded_array_element tint_symbol_13[4] = {{tint_symbol_10(buffer, (offset + 0u))}, {tint_symbol_10(buffer, (offset + 16u))}, {tint_symbol_10(buffer, (offset + 32u))}, {tint_symbol_10(buffer, (offset + 48u))}};
|
||||
return tint_symbol_13;
|
||||
}
|
||||
|
||||
cbuffer cbuffer_s : register(b0, space0) {
|
||||
uint4 s[13];
|
||||
};
|
||||
|
||||
[numthreads(1, 1, 1)]
|
||||
void main() {
|
||||
const int3 a = asint(s[0].xyz);
|
||||
const int b = asint(s[0].w);
|
||||
const uint3 c = s[1].xyz;
|
||||
const uint d = s[1].w;
|
||||
const float3 e = asfloat(s[2].xyz);
|
||||
const float f = asfloat(s[2].w);
|
||||
const int2 g = asint(s[3].xy);
|
||||
const int2 h = asint(s[3].zw);
|
||||
const float2x3 i = tint_symbol_7(s, 64u);
|
||||
const float3x2 j = tint_symbol_9(s, 96u);
|
||||
const Inner k = tint_symbol_10(s, 128u);
|
||||
const tint_padded_array_element l[4] = tint_symbol_11(s, 144u);
|
||||
return;
|
||||
}
|
|
@ -0,0 +1,46 @@
|
|||
#include <metal_stdlib>
|
||||
|
||||
using namespace metal;
|
||||
struct Inner {
|
||||
/* 0x0000 */ int x;
|
||||
};
|
||||
struct tint_padded_array_element {
|
||||
/* 0x0000 */ Inner el;
|
||||
/* 0x0004 */ int8_t tint_pad[12];
|
||||
};
|
||||
struct tint_array_wrapper {
|
||||
/* 0x0000 */ tint_padded_array_element arr[4];
|
||||
};
|
||||
struct S {
|
||||
/* 0x0000 */ packed_int3 a;
|
||||
/* 0x000c */ int b;
|
||||
/* 0x0010 */ packed_uint3 c;
|
||||
/* 0x001c */ uint d;
|
||||
/* 0x0020 */ packed_float3 e;
|
||||
/* 0x002c */ float f;
|
||||
/* 0x0030 */ packed_int2 g;
|
||||
/* 0x0038 */ packed_int2 h;
|
||||
/* 0x0040 */ float2x3 i;
|
||||
/* 0x0060 */ float3x2 j;
|
||||
/* 0x0078 */ int8_t tint_pad_1[8];
|
||||
/* 0x0080 */ Inner k;
|
||||
/* 0x0084 */ int8_t tint_pad_2[12];
|
||||
/* 0x0090 */ tint_array_wrapper l;
|
||||
};
|
||||
|
||||
kernel void tint_symbol(constant S& s [[buffer(0)]]) {
|
||||
int3 const a = s.a;
|
||||
int const b = s.b;
|
||||
uint3 const c = s.c;
|
||||
uint const d = s.d;
|
||||
float3 const e = s.e;
|
||||
float const f = s.f;
|
||||
int2 const g = s.g;
|
||||
int2 const h = s.h;
|
||||
float2x3 const i = s.i;
|
||||
float3x2 const j = s.j;
|
||||
Inner const k = s.k;
|
||||
tint_array_wrapper const l = s.l;
|
||||
return;
|
||||
}
|
||||
|
|
@ -0,0 +1,116 @@
|
|||
; SPIR-V
|
||||
; Version: 1.3
|
||||
; Generator: Google Tint Compiler; 0
|
||||
; Bound: 67
|
||||
; Schema: 0
|
||||
OpCapability Shader
|
||||
OpMemoryModel Logical GLSL450
|
||||
OpEntryPoint GLCompute %main "main"
|
||||
OpExecutionMode %main LocalSize 1 1 1
|
||||
OpName %S "S"
|
||||
OpMemberName %S 0 "a"
|
||||
OpMemberName %S 1 "b"
|
||||
OpMemberName %S 2 "c"
|
||||
OpMemberName %S 3 "d"
|
||||
OpMemberName %S 4 "e"
|
||||
OpMemberName %S 5 "f"
|
||||
OpMemberName %S 6 "g"
|
||||
OpMemberName %S 7 "h"
|
||||
OpMemberName %S 8 "i"
|
||||
OpMemberName %S 9 "j"
|
||||
OpMemberName %S 10 "k"
|
||||
OpName %Inner "Inner"
|
||||
OpMemberName %Inner 0 "x"
|
||||
OpMemberName %S 11 "l"
|
||||
OpName %s "s"
|
||||
OpName %main "main"
|
||||
OpDecorate %S Block
|
||||
OpMemberDecorate %S 0 Offset 0
|
||||
OpMemberDecorate %S 1 Offset 12
|
||||
OpMemberDecorate %S 2 Offset 16
|
||||
OpMemberDecorate %S 3 Offset 28
|
||||
OpMemberDecorate %S 4 Offset 32
|
||||
OpMemberDecorate %S 5 Offset 44
|
||||
OpMemberDecorate %S 6 Offset 48
|
||||
OpMemberDecorate %S 7 Offset 56
|
||||
OpMemberDecorate %S 8 Offset 64
|
||||
OpMemberDecorate %S 8 ColMajor
|
||||
OpMemberDecorate %S 8 MatrixStride 16
|
||||
OpMemberDecorate %S 9 Offset 96
|
||||
OpMemberDecorate %S 9 ColMajor
|
||||
OpMemberDecorate %S 9 MatrixStride 8
|
||||
OpMemberDecorate %S 10 Offset 128
|
||||
OpMemberDecorate %Inner 0 Offset 0
|
||||
OpMemberDecorate %S 11 Offset 144
|
||||
OpDecorate %_arr_Inner_uint_4 ArrayStride 16
|
||||
OpDecorate %s NonWritable
|
||||
OpDecorate %s Binding 0
|
||||
OpDecorate %s DescriptorSet 0
|
||||
%int = OpTypeInt 32 1
|
||||
%v3int = OpTypeVector %int 3
|
||||
%uint = OpTypeInt 32 0
|
||||
%v3uint = OpTypeVector %uint 3
|
||||
%float = OpTypeFloat 32
|
||||
%v3float = OpTypeVector %float 3
|
||||
%v2int = OpTypeVector %int 2
|
||||
%mat2v3float = OpTypeMatrix %v3float 2
|
||||
%v2float = OpTypeVector %float 2
|
||||
%mat3v2float = OpTypeMatrix %v2float 3
|
||||
%Inner = OpTypeStruct %int
|
||||
%uint_4 = OpConstant %uint 4
|
||||
%_arr_Inner_uint_4 = OpTypeArray %Inner %uint_4
|
||||
%S = OpTypeStruct %v3int %int %v3uint %uint %v3float %float %v2int %v2int %mat2v3float %mat3v2float %Inner %_arr_Inner_uint_4
|
||||
%_ptr_Uniform_S = OpTypePointer Uniform %S
|
||||
%s = OpVariable %_ptr_Uniform_S Uniform
|
||||
%void = OpTypeVoid
|
||||
%17 = OpTypeFunction %void
|
||||
%uint_0 = OpConstant %uint 0
|
||||
%_ptr_Uniform_v3int = OpTypePointer Uniform %v3int
|
||||
%uint_1 = OpConstant %uint 1
|
||||
%_ptr_Uniform_int = OpTypePointer Uniform %int
|
||||
%uint_2 = OpConstant %uint 2
|
||||
%_ptr_Uniform_v3uint = OpTypePointer Uniform %v3uint
|
||||
%uint_3 = OpConstant %uint 3
|
||||
%_ptr_Uniform_uint = OpTypePointer Uniform %uint
|
||||
%_ptr_Uniform_v3float = OpTypePointer Uniform %v3float
|
||||
%uint_5 = OpConstant %uint 5
|
||||
%_ptr_Uniform_float = OpTypePointer Uniform %float
|
||||
%uint_6 = OpConstant %uint 6
|
||||
%_ptr_Uniform_v2int = OpTypePointer Uniform %v2int
|
||||
%uint_7 = OpConstant %uint 7
|
||||
%uint_8 = OpConstant %uint 8
|
||||
%_ptr_Uniform_mat2v3float = OpTypePointer Uniform %mat2v3float
|
||||
%uint_9 = OpConstant %uint 9
|
||||
%_ptr_Uniform_mat3v2float = OpTypePointer Uniform %mat3v2float
|
||||
%uint_10 = OpConstant %uint 10
|
||||
%_ptr_Uniform_Inner = OpTypePointer Uniform %Inner
|
||||
%uint_11 = OpConstant %uint 11
|
||||
%_ptr_Uniform__arr_Inner_uint_4 = OpTypePointer Uniform %_arr_Inner_uint_4
|
||||
%main = OpFunction %void None %17
|
||||
%20 = OpLabel
|
||||
%23 = OpAccessChain %_ptr_Uniform_v3int %s %uint_0
|
||||
%24 = OpLoad %v3int %23
|
||||
%27 = OpAccessChain %_ptr_Uniform_int %s %uint_1
|
||||
%28 = OpLoad %int %27
|
||||
%31 = OpAccessChain %_ptr_Uniform_v3uint %s %uint_2
|
||||
%32 = OpLoad %v3uint %31
|
||||
%35 = OpAccessChain %_ptr_Uniform_uint %s %uint_3
|
||||
%36 = OpLoad %uint %35
|
||||
%38 = OpAccessChain %_ptr_Uniform_v3float %s %uint_4
|
||||
%39 = OpLoad %v3float %38
|
||||
%42 = OpAccessChain %_ptr_Uniform_float %s %uint_5
|
||||
%43 = OpLoad %float %42
|
||||
%46 = OpAccessChain %_ptr_Uniform_v2int %s %uint_6
|
||||
%47 = OpLoad %v2int %46
|
||||
%49 = OpAccessChain %_ptr_Uniform_v2int %s %uint_7
|
||||
%50 = OpLoad %v2int %49
|
||||
%53 = OpAccessChain %_ptr_Uniform_mat2v3float %s %uint_8
|
||||
%54 = OpLoad %mat2v3float %53
|
||||
%57 = OpAccessChain %_ptr_Uniform_mat3v2float %s %uint_9
|
||||
%58 = OpLoad %mat3v2float %57
|
||||
%61 = OpAccessChain %_ptr_Uniform_Inner %s %uint_10
|
||||
%62 = OpLoad %Inner %61
|
||||
%65 = OpAccessChain %_ptr_Uniform__arr_Inner_uint_4 %s %uint_11
|
||||
%66 = OpLoad %_arr_Inner_uint_4 %65
|
||||
OpReturn
|
||||
OpFunctionEnd
|
|
@ -0,0 +1,39 @@
|
|||
struct Inner {
|
||||
x : i32;
|
||||
};
|
||||
|
||||
[[block]]
|
||||
struct S {
|
||||
a : vec3<i32>;
|
||||
b : i32;
|
||||
c : vec3<u32>;
|
||||
d : u32;
|
||||
e : vec3<f32>;
|
||||
f : f32;
|
||||
g : vec2<i32>;
|
||||
h : vec2<i32>;
|
||||
i : mat2x3<f32>;
|
||||
j : mat3x2<f32>;
|
||||
[[align(16)]]
|
||||
k : Inner;
|
||||
[[align(16)]]
|
||||
l : [[stride(16)]] array<Inner, 4>;
|
||||
};
|
||||
|
||||
[[binding(0), group(0)]] var<uniform> s : S;
|
||||
|
||||
[[stage(compute), workgroup_size(1)]]
|
||||
fn main() {
|
||||
let a = s.a;
|
||||
let b = s.b;
|
||||
let c = s.c;
|
||||
let d = s.d;
|
||||
let e = s.e;
|
||||
let f = s.f;
|
||||
let g = s.g;
|
||||
let h = s.h;
|
||||
let i = s.i;
|
||||
let j = s.j;
|
||||
let k = s.k;
|
||||
let l = s.l;
|
||||
}
|
|
@ -19,20 +19,11 @@ tint_symbol_2 vs_main(tint_symbol_1 tint_symbol) {
|
|||
float2 texcoord[3] = {float2(-0.5f, 0.0f), float2(1.5f, 0.0f), float2(0.5f, 2.0f)};
|
||||
VertexOutputs output = (VertexOutputs)0;
|
||||
output.position = float4(((texcoord[VertexIndex] * 2.0f) - float2(1.0f, 1.0f)), 0.0f, 1.0f);
|
||||
const uint scalar_offset = (4u) / 4;
|
||||
bool flipY = (asfloat(uniforms[scalar_offset / 4][scalar_offset % 4]) < 0.0f);
|
||||
bool flipY = (asfloat(uniforms[0].y) < 0.0f);
|
||||
if (flipY) {
|
||||
const uint scalar_offset_1 = (0u) / 4;
|
||||
uint4 ubo_load = uniforms[scalar_offset_1 / 4];
|
||||
const uint scalar_offset_2 = (8u) / 4;
|
||||
uint4 ubo_load_1 = uniforms[scalar_offset_2 / 4];
|
||||
output.texcoords = ((((texcoord[VertexIndex] * asfloat(((scalar_offset_1 & 2) ? ubo_load.zw : ubo_load.xy))) + asfloat(((scalar_offset_2 & 2) ? ubo_load_1.zw : ubo_load_1.xy))) * float2(1.0f, -1.0f)) + float2(0.0f, 1.0f));
|
||||
output.texcoords = ((((texcoord[VertexIndex] * asfloat(uniforms[0].xy)) + asfloat(uniforms[0].zw)) * float2(1.0f, -1.0f)) + float2(0.0f, 1.0f));
|
||||
} else {
|
||||
const uint scalar_offset_3 = (0u) / 4;
|
||||
uint4 ubo_load_2 = uniforms[scalar_offset_3 / 4];
|
||||
const uint scalar_offset_4 = (8u) / 4;
|
||||
uint4 ubo_load_3 = uniforms[scalar_offset_4 / 4];
|
||||
output.texcoords = ((((texcoord[VertexIndex] * float2(1.0f, -1.0f)) + float2(0.0f, 1.0f)) * asfloat(((scalar_offset_3 & 2) ? ubo_load_2.zw : ubo_load_2.xy))) + asfloat(((scalar_offset_4 & 2) ? ubo_load_3.zw : ubo_load_3.xy)));
|
||||
output.texcoords = ((((texcoord[VertexIndex] * float2(1.0f, -1.0f)) + float2(0.0f, 1.0f)) * asfloat(uniforms[0].xy)) + asfloat(uniforms[0].zw));
|
||||
}
|
||||
const tint_symbol_2 tint_symbol_8 = {output.texcoords, output.position};
|
||||
return tint_symbol_8;
|
||||
|
|
|
@ -30,8 +30,7 @@ void main(tint_symbol_2 tint_symbol_1) {
|
|||
int2 size = tint_tmp;
|
||||
int2 dstTexCoord = int2(GlobalInvocationID.xy);
|
||||
int2 srcTexCoord = dstTexCoord;
|
||||
const uint scalar_offset = (0u) / 4;
|
||||
if ((uniforms[scalar_offset / 4][scalar_offset % 4] == 1u)) {
|
||||
if ((uniforms[0].x == 1u)) {
|
||||
srcTexCoord.y = ((size.y - dstTexCoord.y) - 1);
|
||||
}
|
||||
float4 srcColor = src.Load(int3(srcTexCoord, 0));
|
||||
|
@ -40,17 +39,13 @@ void main(tint_symbol_2 tint_symbol_1) {
|
|||
uint4 srcColorBits = uint4(0u, 0u, 0u, 0u);
|
||||
uint4 dstColorBits = uint4(dstColor);
|
||||
{
|
||||
uint i = 0u;
|
||||
while (true) {
|
||||
const uint scalar_offset_1 = (12u) / 4;
|
||||
if (!((i < uniforms[scalar_offset_1 / 4][scalar_offset_1 % 4]))) { break; }
|
||||
for(uint i = 0u; (i < uniforms[0].w); i = (i + 1u)) {
|
||||
Set_uint4(srcColorBits, i, ConvertToFp16FloatValue(srcColor[i]));
|
||||
bool tint_tmp_1 = success;
|
||||
if (tint_tmp_1) {
|
||||
tint_tmp_1 = (srcColorBits[i] == dstColorBits[i]);
|
||||
}
|
||||
success = (tint_tmp_1);
|
||||
i = (i + 1u);
|
||||
}
|
||||
}
|
||||
uint outputIndex = ((GlobalInvocationID.y * uint(size.x)) + GlobalInvocationID.x);
|
||||
|
|
|
@ -13,10 +13,8 @@ struct tint_symbol_1 {
|
|||
void main(tint_symbol_1 tint_symbol) {
|
||||
const uint3 global_id = tint_symbol.global_id;
|
||||
const uint2 resultCell = uint2(global_id.y, global_id.x);
|
||||
const uint scalar_offset = (4u) / 4;
|
||||
const uint dimInner = uniforms[scalar_offset / 4][scalar_offset % 4];
|
||||
const uint scalar_offset_1 = (20u) / 4;
|
||||
const uint dimOutter = uniforms[scalar_offset_1 / 4][scalar_offset_1 % 4];
|
||||
const uint dimInner = uniforms[0].y;
|
||||
const uint dimOutter = uniforms[1].y;
|
||||
uint result = 0u;
|
||||
{
|
||||
for(uint i = 0u; (i < dimInner); i = (i + 1u)) {
|
||||
|
|
|
@ -861,9 +861,7 @@ void main_1() {
|
|||
const float2 x_762 = uv;
|
||||
uv = float2(0.0f, 0.0f);
|
||||
uv = x_762;
|
||||
const uint scalar_offset = (0u) / 4;
|
||||
uint4 ubo_load = x_188[scalar_offset / 4];
|
||||
const float2 x_191 = asfloat(((scalar_offset & 2) ? ubo_load.zw : ubo_load.xy));
|
||||
const float2 x_191 = asfloat(x_188[0].xy);
|
||||
const QuicksortObject x_763 = obj;
|
||||
const int tint_symbol_51[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
|
||||
const QuicksortObject tint_symbol_52 = {tint_symbol_51};
|
||||
|
|
|
@ -25,23 +25,17 @@ void main(tint_symbol_2 tint_symbol_1) {
|
|||
const uint2 dstTexCoord = uint2(GlobalInvocationID.xy);
|
||||
const float4 nonCoveredColor = float4(0.0f, 1.0f, 0.0f, 1.0f);
|
||||
bool success = true;
|
||||
const uint scalar_offset = (16u) / 4;
|
||||
bool tint_tmp_4 = (dstTexCoord.x < uniforms[scalar_offset / 4][scalar_offset % 4]);
|
||||
bool tint_tmp_4 = (dstTexCoord.x < uniforms[1].x);
|
||||
if (!tint_tmp_4) {
|
||||
const uint scalar_offset_1 = (20u) / 4;
|
||||
tint_tmp_4 = (dstTexCoord.y < uniforms[scalar_offset_1 / 4][scalar_offset_1 % 4]);
|
||||
tint_tmp_4 = (dstTexCoord.y < uniforms[1].y);
|
||||
}
|
||||
bool tint_tmp_3 = (tint_tmp_4);
|
||||
if (!tint_tmp_3) {
|
||||
const uint scalar_offset_2 = (16u) / 4;
|
||||
const uint scalar_offset_3 = (24u) / 4;
|
||||
tint_tmp_3 = (dstTexCoord.x >= (uniforms[scalar_offset_2 / 4][scalar_offset_2 % 4] + uniforms[scalar_offset_3 / 4][scalar_offset_3 % 4]));
|
||||
tint_tmp_3 = (dstTexCoord.x >= (uniforms[1].x + uniforms[1].z));
|
||||
}
|
||||
bool tint_tmp_2 = (tint_tmp_3);
|
||||
if (!tint_tmp_2) {
|
||||
const uint scalar_offset_4 = (20u) / 4;
|
||||
const uint scalar_offset_5 = (28u) / 4;
|
||||
tint_tmp_2 = (dstTexCoord.y >= (uniforms[scalar_offset_4 / 4][scalar_offset_4 % 4] + uniforms[scalar_offset_5 / 4][scalar_offset_5 % 4]));
|
||||
tint_tmp_2 = (dstTexCoord.y >= (uniforms[1].y + uniforms[1].w));
|
||||
}
|
||||
if ((tint_tmp_2)) {
|
||||
bool tint_tmp_5 = success;
|
||||
|
@ -50,19 +44,13 @@ void main(tint_symbol_2 tint_symbol_1) {
|
|||
}
|
||||
success = (tint_tmp_5);
|
||||
} else {
|
||||
const uint scalar_offset_6 = (16u) / 4;
|
||||
uint4 ubo_load = uniforms[scalar_offset_6 / 4];
|
||||
const uint scalar_offset_7 = (8u) / 4;
|
||||
uint4 ubo_load_1 = uniforms[scalar_offset_7 / 4];
|
||||
uint2 srcTexCoord = ((dstTexCoord - ((scalar_offset_6 & 2) ? ubo_load.zw : ubo_load.xy)) + ((scalar_offset_7 & 2) ? ubo_load_1.zw : ubo_load_1.xy));
|
||||
const uint scalar_offset_8 = (0u) / 4;
|
||||
if ((uniforms[scalar_offset_8 / 4][scalar_offset_8 % 4] == 1u)) {
|
||||
uint2 srcTexCoord = ((dstTexCoord - uniforms[1].xy) + uniforms[0].zw);
|
||||
if ((uniforms[0].x == 1u)) {
|
||||
srcTexCoord.y = ((uint(srcSize.y) - srcTexCoord.y) - 1u);
|
||||
}
|
||||
const float4 srcColor = src.Load(int3(srcTexCoord, 0));
|
||||
const float4 dstColor = tint_symbol.Load(int3(dstTexCoord, 0));
|
||||
const uint scalar_offset_9 = (4u) / 4;
|
||||
if ((uniforms[scalar_offset_9 / 4][scalar_offset_9 % 4] == 2u)) {
|
||||
if ((uniforms[0].y == 2u)) {
|
||||
bool tint_tmp_7 = success;
|
||||
if (tint_tmp_7) {
|
||||
tint_tmp_7 = aboutEqual(dstColor.r, srcColor.r);
|
||||
|
|
|
@ -6,45 +6,36 @@ cbuffer cbuffer_uniforms : register(b3, space0) {
|
|||
};
|
||||
|
||||
float mm_readA(uint row, uint col) {
|
||||
const uint scalar_offset = (0u) / 4;
|
||||
bool tint_tmp = (row < uniforms[scalar_offset / 4][scalar_offset % 4]);
|
||||
bool tint_tmp = (row < uniforms[0].x);
|
||||
if (tint_tmp) {
|
||||
const uint scalar_offset_1 = (4u) / 4;
|
||||
tint_tmp = (col < uniforms[scalar_offset_1 / 4][scalar_offset_1 % 4]);
|
||||
tint_tmp = (col < uniforms[0].y);
|
||||
}
|
||||
if ((tint_tmp)) {
|
||||
const uint scalar_offset_2 = (4u) / 4;
|
||||
const float result = asfloat(firstMatrix.Load((4u * ((row * uniforms[scalar_offset_2 / 4][scalar_offset_2 % 4]) + col))));
|
||||
const float result = asfloat(firstMatrix.Load((4u * ((row * uniforms[0].y) + col))));
|
||||
return result;
|
||||
}
|
||||
return 0.0f;
|
||||
}
|
||||
|
||||
float mm_readB(uint row, uint col) {
|
||||
const uint scalar_offset_3 = (4u) / 4;
|
||||
bool tint_tmp_1 = (row < uniforms[scalar_offset_3 / 4][scalar_offset_3 % 4]);
|
||||
bool tint_tmp_1 = (row < uniforms[0].y);
|
||||
if (tint_tmp_1) {
|
||||
const uint scalar_offset_4 = (8u) / 4;
|
||||
tint_tmp_1 = (col < uniforms[scalar_offset_4 / 4][scalar_offset_4 % 4]);
|
||||
tint_tmp_1 = (col < uniforms[0].z);
|
||||
}
|
||||
if ((tint_tmp_1)) {
|
||||
const uint scalar_offset_5 = (8u) / 4;
|
||||
const float result = asfloat(secondMatrix.Load((4u * ((row * uniforms[scalar_offset_5 / 4][scalar_offset_5 % 4]) + col))));
|
||||
const float result = asfloat(secondMatrix.Load((4u * ((row * uniforms[0].z) + col))));
|
||||
return result;
|
||||
}
|
||||
return 0.0f;
|
||||
}
|
||||
|
||||
void mm_write(uint row, uint col, float value) {
|
||||
const uint scalar_offset_6 = (0u) / 4;
|
||||
bool tint_tmp_2 = (row < uniforms[scalar_offset_6 / 4][scalar_offset_6 % 4]);
|
||||
bool tint_tmp_2 = (row < uniforms[0].x);
|
||||
if (tint_tmp_2) {
|
||||
const uint scalar_offset_7 = (8u) / 4;
|
||||
tint_tmp_2 = (col < uniforms[scalar_offset_7 / 4][scalar_offset_7 % 4]);
|
||||
tint_tmp_2 = (col < uniforms[0].z);
|
||||
}
|
||||
if ((tint_tmp_2)) {
|
||||
const uint scalar_offset_8 = (8u) / 4;
|
||||
const uint index = (col + (row * uniforms[scalar_offset_8 / 4][scalar_offset_8 % 4]));
|
||||
const uint index = (col + (row * uniforms[0].z));
|
||||
resultMatrix.Store((4u * index), asuint(value));
|
||||
}
|
||||
}
|
||||
|
@ -93,8 +84,7 @@ void main(tint_symbol_1 tint_symbol) {
|
|||
const uint tileCol = (local_id.x * ColPerThread);
|
||||
const uint globalRow = (global_id.y * RowPerThread);
|
||||
const uint globalCol = (global_id.x * ColPerThread);
|
||||
const uint scalar_offset_9 = (4u) / 4;
|
||||
const uint numTiles = (((uniforms[scalar_offset_9 / 4][scalar_offset_9 % 4] - 1u) / TileInner) + 1u);
|
||||
const uint numTiles = (((uniforms[0].y - 1u) / TileInner) + 1u);
|
||||
float acc[16] = (float[16])0;
|
||||
float ACached = 0.0f;
|
||||
float BCached[4] = (float[4])0;
|
||||
|
|
|
@ -196,8 +196,7 @@ void main1() {
|
|||
const float4 _e49 = Mul(_e35, _e48);
|
||||
gl_Position = _e49;
|
||||
v_Color = a_Color1;
|
||||
const uint scalar_offset_9 = (32u) / 4;
|
||||
const float4 _e52 = asfloat(global1[scalar_offset_9 / 4]);
|
||||
const float4 _e52 = asfloat(global1[2]);
|
||||
if ((_e52.x == 2.0f)) {
|
||||
{
|
||||
const float3 _e59 = a_Normal1;
|
||||
|
|
|
@ -33,20 +33,17 @@ void main(tint_symbol_1 tint_symbol) {
|
|||
}
|
||||
}
|
||||
GroupMemoryBarrierWithGroupSync();
|
||||
const uint scalar_offset = (0u) / 4;
|
||||
const uint filterOffset = ((params[scalar_offset / 4][scalar_offset % 4] - 1u) / 2u);
|
||||
const uint filterOffset = ((params[0].x - 1u) / 2u);
|
||||
int3 tint_tmp;
|
||||
inputTex.GetDimensions(0, tint_tmp.x, tint_tmp.y, tint_tmp.z);
|
||||
const int2 dims = tint_tmp.xy;
|
||||
const uint scalar_offset_1 = (4u) / 4;
|
||||
const int2 baseIndex = (int2(((WorkGroupID.xy * uint2(params[scalar_offset_1 / 4][scalar_offset_1 % 4], 4u)) + (LocalInvocationID.xy * uint2(4u, 1u)))) - int2(int(filterOffset), 0));
|
||||
const int2 baseIndex = (int2(((WorkGroupID.xy * uint2(params[0].y, 4u)) + (LocalInvocationID.xy * uint2(4u, 1u)))) - int2(int(filterOffset), 0));
|
||||
{
|
||||
for(uint r = 0u; (r < 4u); r = (r + 1u)) {
|
||||
{
|
||||
for(uint c = 0u; (c < 4u); c = (c + 1u)) {
|
||||
int2 loadIndex = (baseIndex + int2(int(c), int(r)));
|
||||
const uint scalar_offset_2 = (0u) / 4;
|
||||
if ((flip[scalar_offset_2 / 4][scalar_offset_2 % 4] != 0u)) {
|
||||
if ((flip[0].x != 0u)) {
|
||||
loadIndex = loadIndex.yx;
|
||||
}
|
||||
tile[r][((4u * LocalInvocationID.x) + c)] = inputTex.SampleLevel(samp, ((float2(loadIndex) + float2(0.25f, 0.25f)) / float2(dims)), 0.0f).rgb;
|
||||
|
@ -60,8 +57,7 @@ void main(tint_symbol_1 tint_symbol) {
|
|||
{
|
||||
for(uint c = 0u; (c < 4u); c = (c + 1u)) {
|
||||
int2 writeIndex = (baseIndex + int2(int(c), int(r)));
|
||||
const uint scalar_offset_3 = (0u) / 4;
|
||||
if ((flip[scalar_offset_3 / 4][scalar_offset_3 % 4] != 0u)) {
|
||||
if ((flip[0].x != 0u)) {
|
||||
writeIndex = writeIndex.yx;
|
||||
}
|
||||
const uint center = ((4u * LocalInvocationID.x) + c);
|
||||
|
@ -76,14 +72,9 @@ void main(tint_symbol_1 tint_symbol) {
|
|||
if ((tint_tmp_1)) {
|
||||
float3 acc = float3(0.0f, 0.0f, 0.0f);
|
||||
{
|
||||
uint f = 0u;
|
||||
while (true) {
|
||||
const uint scalar_offset_4 = (0u) / 4;
|
||||
if (!((f < params[scalar_offset_4 / 4][scalar_offset_4 % 4]))) { break; }
|
||||
for(uint f = 0u; (f < params[0].x); f = (f + 1u)) {
|
||||
uint i = ((center + f) - filterOffset);
|
||||
const uint scalar_offset_5 = (0u) / 4;
|
||||
acc = (acc + ((1.0f / float(params[scalar_offset_5 / 4][scalar_offset_5 % 4])) * tile[r][i]));
|
||||
f = (f + 1u);
|
||||
acc = (acc + ((1.0f / float(params[0].x)) * tile[r][i]));
|
||||
}
|
||||
}
|
||||
outputTex[writeIndex] = float4(acc, 1.0f);
|
||||
|
|
|
@ -33,10 +33,8 @@ float mm_readA_i1_i1_(inout int row, inout int col) {
|
|||
int2 param_10 = int2(0, 0);
|
||||
int2 param_11 = int2(0, 0);
|
||||
float x_430 = 0.0f;
|
||||
const uint scalar_offset = (20u) / 4;
|
||||
const int x_417 = asint(x_48[scalar_offset / 4][scalar_offset % 4]);
|
||||
const uint scalar_offset_1 = (24u) / 4;
|
||||
const int x_419 = asint(x_48[scalar_offset_1 / 4][scalar_offset_1 % 4]);
|
||||
const int x_417 = asint(x_48[1].y);
|
||||
const int x_419 = asint(x_48[1].z);
|
||||
batchASize = (x_417 * x_419);
|
||||
const int x_421 = row;
|
||||
const int x_422 = col;
|
||||
|
@ -64,10 +62,8 @@ float mm_readB_i1_i1_(inout int row_1, inout int col_1) {
|
|||
int2 param_12 = int2(0, 0);
|
||||
int2 param_13 = int2(0, 0);
|
||||
float x_468 = 0.0f;
|
||||
const uint scalar_offset_2 = (36u) / 4;
|
||||
const int x_455 = asint(x_48[scalar_offset_2 / 4][scalar_offset_2 % 4]);
|
||||
const uint scalar_offset_3 = (40u) / 4;
|
||||
const int x_457 = asint(x_48[scalar_offset_3 / 4][scalar_offset_3 % 4]);
|
||||
const int x_455 = asint(x_48[2].y);
|
||||
const int x_457 = asint(x_48[2].z);
|
||||
batchBSize = (x_455 * x_457);
|
||||
const int x_459 = row_1;
|
||||
const int x_460 = col_1;
|
||||
|
@ -92,10 +88,8 @@ float mm_readB_i1_i1_(inout int row_1, inout int col_1) {
|
|||
|
||||
int getOutputFlatIndex_vi3_(inout int3 coords) {
|
||||
const int3 x_99 = coords;
|
||||
const uint scalar_offset_4 = (64u) / 4;
|
||||
const int x_105 = asint(x_48[scalar_offset_4 / 4][scalar_offset_4 % 4]);
|
||||
const uint scalar_offset_5 = (68u) / 4;
|
||||
const int x_107 = asint(x_48[scalar_offset_5 / 4][scalar_offset_5 % 4]);
|
||||
const int x_105 = asint(x_48[4].x);
|
||||
const int x_107 = asint(x_48[4].y);
|
||||
return int(dot(float3(x_99), float3(int3(x_105, x_107, 1))));
|
||||
}
|
||||
|
||||
|
@ -330,14 +324,11 @@ void main_1() {
|
|||
int param_18 = 0;
|
||||
int param_19 = 0;
|
||||
int param_20 = 0;
|
||||
const uint scalar_offset_6 = (20u) / 4;
|
||||
const int x_67 = asint(x_48[scalar_offset_6 / 4][scalar_offset_6 % 4]);
|
||||
const int x_67 = asint(x_48[1].y);
|
||||
dimAOuter_1 = x_67;
|
||||
const uint scalar_offset_7 = (24u) / 4;
|
||||
const int x_71 = asint(x_48[scalar_offset_7 / 4][scalar_offset_7 % 4]);
|
||||
const int x_71 = asint(x_48[1].z);
|
||||
dimInner_1 = x_71;
|
||||
const uint scalar_offset_8 = (40u) / 4;
|
||||
const int x_75 = asint(x_48[scalar_offset_8 / 4][scalar_offset_8 % 4]);
|
||||
const int x_75 = asint(x_48[2].z);
|
||||
dimBOuter_1 = x_75;
|
||||
const uint x_505 = gl_GlobalInvocationID.z;
|
||||
batch = asint(x_505);
|
||||
|
|
|
@ -22,8 +22,7 @@ static float2 vUV = float2(0.0f, 0.0f);
|
|||
float4x4 getFrameData_f1_(inout float frameID) {
|
||||
float fX = 0.0f;
|
||||
const float x_15 = frameID;
|
||||
const uint scalar_offset = (108u) / 4;
|
||||
const float x_25 = asfloat(x_20[scalar_offset / 4][scalar_offset % 4]);
|
||||
const float x_25 = asfloat(x_20[6].w);
|
||||
fX = (x_15 / x_25);
|
||||
const float4 x_40 = frameMapTexture.SampleBias(frameMapSampler, float2(fX, 0.0f), 0.0f);
|
||||
const float4 x_47 = frameMapTexture.SampleBias(frameMapSampler, float2(fX, 0.25f), 0.0f);
|
||||
|
@ -55,16 +54,11 @@ void main_1() {
|
|||
const float x_91 = tileUV.y;
|
||||
tileUV.y = (1.0f - x_91);
|
||||
tileID = floor(tUV);
|
||||
const uint scalar_offset_1 = (96u) / 4;
|
||||
uint4 ubo_load = x_20[scalar_offset_1 / 4];
|
||||
const float2 x_101 = asfloat(((scalar_offset_1 & 2) ? ubo_load.zw : ubo_load.xy));
|
||||
const float2 x_101 = asfloat(x_20[6].xy);
|
||||
sheetUnits = (float2(1.0f, 1.0f) / x_101);
|
||||
const uint scalar_offset_2 = (108u) / 4;
|
||||
const float x_106 = asfloat(x_20[scalar_offset_2 / 4][scalar_offset_2 % 4]);
|
||||
const float x_106 = asfloat(x_20[6].w);
|
||||
spriteUnits = (1.0f / x_106);
|
||||
const uint scalar_offset_3 = (88u) / 4;
|
||||
uint4 ubo_load_1 = x_20[scalar_offset_3 / 4];
|
||||
const float2 x_111 = asfloat(((scalar_offset_3 & 2) ? ubo_load_1.zw : ubo_load_1.xy));
|
||||
const float2 x_111 = asfloat(x_20[5].zw);
|
||||
stageUnits = (float2(1.0f, 1.0f) / x_111);
|
||||
i = 0;
|
||||
{
|
||||
|
@ -72,18 +66,14 @@ void main_1() {
|
|||
switch(i) {
|
||||
case 1: {
|
||||
const float2 x_150 = tileID;
|
||||
const uint scalar_offset_4 = (88u) / 4;
|
||||
uint4 ubo_load_2 = x_20[scalar_offset_4 / 4];
|
||||
const float2 x_154 = asfloat(((scalar_offset_4 & 2) ? ubo_load_2.zw : ubo_load_2.xy));
|
||||
const float2 x_154 = asfloat(x_20[5].zw);
|
||||
const float4 x_156 = tileMapsTexture1.SampleBias(tileMapsSampler, ((x_150 + float2(0.5f, 0.5f)) / x_154), 0.0f);
|
||||
frameID_1 = x_156.x;
|
||||
break;
|
||||
}
|
||||
case 0: {
|
||||
const float2 x_136 = tileID;
|
||||
const uint scalar_offset_5 = (88u) / 4;
|
||||
uint4 ubo_load_3 = x_20[scalar_offset_5 / 4];
|
||||
const float2 x_140 = asfloat(((scalar_offset_5 & 2) ? ubo_load_3.zw : ubo_load_3.xy));
|
||||
const float2 x_140 = asfloat(x_20[5].zw);
|
||||
const float4 x_142 = tileMapsTexture0.SampleBias(tileMapsSampler, ((x_136 + float2(0.5f, 0.5f)) / x_140), 0.0f);
|
||||
frameID_1 = x_142.x;
|
||||
break;
|
||||
|
@ -93,14 +83,12 @@ void main_1() {
|
|||
}
|
||||
}
|
||||
const float x_166 = frameID_1;
|
||||
const uint scalar_offset_6 = (108u) / 4;
|
||||
const float x_169 = asfloat(x_20[scalar_offset_6 / 4][scalar_offset_6 % 4]);
|
||||
const float x_169 = asfloat(x_20[6].w);
|
||||
const float4 x_172 = animationMapTexture.SampleBias(animationMapSampler, float2(((x_166 + 0.5f) / x_169), 0.0f), 0.0f);
|
||||
animationData = x_172;
|
||||
const float x_174 = animationData.y;
|
||||
if ((x_174 > 0.0f)) {
|
||||
const uint scalar_offset_7 = (0u) / 4;
|
||||
const float x_181 = asfloat(x_20[scalar_offset_7 / 4][scalar_offset_7 % 4]);
|
||||
const float x_181 = asfloat(x_20[0].x);
|
||||
const float x_184 = animationData.z;
|
||||
mt = ((x_181 * x_184) % 1.0f);
|
||||
f = 0.0f;
|
||||
|
@ -113,8 +101,7 @@ void main_1() {
|
|||
break;
|
||||
}
|
||||
const float x_208 = frameID_1;
|
||||
const uint scalar_offset_8 = (108u) / 4;
|
||||
const float x_211 = asfloat(x_20[scalar_offset_8 / 4][scalar_offset_8 % 4]);
|
||||
const float x_211 = asfloat(x_20[6].w);
|
||||
const float4 x_217 = animationMapTexture.SampleBias(animationMapSampler, float2(((x_208 + 0.5f) / x_211), (0.125f * f)), 0.0f);
|
||||
animationData = x_217;
|
||||
}
|
||||
|
@ -124,9 +111,7 @@ void main_1() {
|
|||
const float4x4 x_225 = getFrameData_f1_(param);
|
||||
frameData = x_225;
|
||||
const float4 x_228 = frameData[0];
|
||||
const uint scalar_offset_9 = (96u) / 4;
|
||||
uint4 ubo_load_4 = x_20[scalar_offset_9 / 4];
|
||||
const float2 x_231 = asfloat(((scalar_offset_9 & 2) ? ubo_load_4.zw : ubo_load_4.xy));
|
||||
const float2 x_231 = asfloat(x_20[6].xy);
|
||||
frameSize = (float2(x_228.w, x_228.z) / x_231);
|
||||
const float4 x_235 = frameData[0];
|
||||
offset_1 = (float2(x_235.x, x_235.y) * sheetUnits);
|
||||
|
@ -156,8 +141,7 @@ void main_1() {
|
|||
}
|
||||
}
|
||||
}
|
||||
const uint scalar_offset_10 = (112u) / 4;
|
||||
const float3 x_310 = asfloat(x_20[scalar_offset_10 / 4].xyz);
|
||||
const float3 x_310 = asfloat(x_20[7].xyz);
|
||||
const float4 x_311 = color;
|
||||
const float3 x_313 = (float3(x_311.x, x_311.y, x_311.z) * x_310);
|
||||
color = float4(x_313.x, x_313.y, x_313.z, color.w);
|
||||
|
|
|
@ -200,17 +200,14 @@ void main_1() {
|
|||
const float4 x_262 = TextureSamplerTexture.Sample(TextureSamplerSampler, vMainuv);
|
||||
tempTextureRead = x_262;
|
||||
const float4 x_264 = tempTextureRead;
|
||||
const uint scalar_offset = (160u) / 4;
|
||||
const float x_273 = asfloat(x_269[scalar_offset / 4][scalar_offset % 4]);
|
||||
const float x_273 = asfloat(x_269[10].x);
|
||||
rgb = (float3(x_264.x, x_264.y, x_264.z) * x_273);
|
||||
const uint scalar_offset_1 = (144u) / 4;
|
||||
const float3 x_279 = asfloat(x_269[scalar_offset_1 / 4].xyz);
|
||||
const float3 x_279 = asfloat(x_269[9].xyz);
|
||||
const float4 x_282 = v_output1;
|
||||
output5 = normalize((x_279 - float3(x_282.x, x_282.y, x_282.z)));
|
||||
output4 = float4(0.0f, 0.0f, 0.0f, 0.0f);
|
||||
uvOffset = float2(0.0f, 0.0f);
|
||||
const uint scalar_offset_2 = (128u) / 4;
|
||||
const float x_292 = asfloat(x_269[scalar_offset_2 / 4][scalar_offset_2 % 4]);
|
||||
const float x_292 = asfloat(x_269[8].x);
|
||||
normalScale = (1.0f / x_292);
|
||||
if (gl_FrontFacing) {
|
||||
x_299 = v_uv;
|
||||
|
@ -223,9 +220,7 @@ void main_1() {
|
|||
const float4 x_317 = v_output1;
|
||||
param_4 = float3(x_317.x, x_317.y, x_317.z);
|
||||
param_5 = TBNUV;
|
||||
const uint scalar_offset_3 = (168u) / 4;
|
||||
uint4 ubo_load = x_269[scalar_offset_3 / 4];
|
||||
const float2 x_324 = asfloat(((scalar_offset_3 & 2) ? ubo_load.zw : ubo_load.xy));
|
||||
const float2 x_324 = asfloat(x_269[10].zw);
|
||||
param_6 = x_324;
|
||||
const float3x3 x_325 = cotangent_frame_vf3_vf3_vf2_vf2_(param_3, param_4, param_5, param_6);
|
||||
TBN = x_325;
|
||||
|
@ -234,8 +229,7 @@ void main_1() {
|
|||
invTBN = x_329;
|
||||
const float3 x_334 = mul(-(output5), invTBN);
|
||||
parallaxLimit = (length(float2(x_334.x, x_334.y)) / mul(-(output5), invTBN).z);
|
||||
const uint scalar_offset_4 = (156u) / 4;
|
||||
const float x_345 = asfloat(x_269[scalar_offset_4 / 4][scalar_offset_4 % 4]);
|
||||
const float x_345 = asfloat(x_269[9].w);
|
||||
parallaxLimit = (parallaxLimit * x_345);
|
||||
const float3 x_352 = mul(-(output5), invTBN);
|
||||
vOffsetDir = normalize(float2(x_352.x, x_352.y));
|
||||
|
@ -270,8 +264,7 @@ void main_1() {
|
|||
parallaxOcclusion_0 = vCurrOffset;
|
||||
uvOffset = parallaxOcclusion_0;
|
||||
const float4 x_452 = TextureSamplerTexture.Sample(TextureSamplerSampler, (v_uv + uvOffset));
|
||||
const uint scalar_offset_5 = (128u) / 4;
|
||||
const float x_454 = asfloat(x_269[scalar_offset_5 / 4][scalar_offset_5 % 4]);
|
||||
const float x_454 = asfloat(x_269[8].x);
|
||||
param_8 = TBN;
|
||||
param_9 = float3(x_452.x, x_452.y, x_452.z);
|
||||
param_10 = (1.0f / x_454);
|
||||
|
@ -282,8 +275,7 @@ void main_1() {
|
|||
tempTextureRead1 = x_475;
|
||||
const float4 x_477 = tempTextureRead1;
|
||||
rgb1 = float3(x_477.x, x_477.y, x_477.z);
|
||||
const uint scalar_offset_6 = (144u) / 4;
|
||||
const float3 x_481 = asfloat(x_269[scalar_offset_6 / 4].xyz);
|
||||
const float3 x_481 = asfloat(x_269[9].xyz);
|
||||
const float4 x_482 = v_output1;
|
||||
viewDirectionW_1 = normalize((x_481 - float3(x_482.x, x_482.y, x_482.z)));
|
||||
shadow = 1.0f;
|
||||
|
@ -294,17 +286,13 @@ void main_1() {
|
|||
normalW = float3(x_494.x, x_494.y, x_494.z);
|
||||
param_11 = viewDirectionW_1;
|
||||
param_12 = normalW;
|
||||
const uint scalar_offset_7 = (0u) / 4;
|
||||
const float4 x_507 = asfloat(light0[scalar_offset_7 / 4]);
|
||||
const float4 x_507 = asfloat(light0[0]);
|
||||
param_13 = x_507;
|
||||
const uint scalar_offset_8 = (16u) / 4;
|
||||
const float4 x_510 = asfloat(light0[scalar_offset_8 / 4]);
|
||||
const float4 x_510 = asfloat(light0[1]);
|
||||
param_14 = float3(x_510.x, x_510.y, x_510.z);
|
||||
const uint scalar_offset_9 = (32u) / 4;
|
||||
const float4 x_514 = asfloat(light0[scalar_offset_9 / 4]);
|
||||
const float4 x_514 = asfloat(light0[2]);
|
||||
param_15 = float3(x_514.x, x_514.y, x_514.z);
|
||||
const uint scalar_offset_10 = (48u) / 4;
|
||||
const float3 x_518 = asfloat(light0[scalar_offset_10 / 4].xyz);
|
||||
const float3 x_518 = asfloat(light0[3].xyz);
|
||||
param_16 = x_518;
|
||||
param_17 = glossiness_1;
|
||||
const lightingInfo x_521 = computeHemisphericLighting_vf3_vf3_vf4_vf3_vf3_vf3_f1_(param_11, param_12, param_13, param_14, param_15, param_16, param_17);
|
||||
|
|
|
@ -36,8 +36,7 @@ void main_1() {
|
|||
const uint x_61 = gl_GlobalInvocationID.x;
|
||||
index = asint(x_61);
|
||||
const int x_63 = index;
|
||||
const uint scalar_offset = (16u) / 4;
|
||||
const int x_70 = asint(x_24[scalar_offset / 4][scalar_offset % 4]);
|
||||
const int x_70 = asint(x_24[1].x);
|
||||
if ((x_63 < x_70)) {
|
||||
const float x_75 = getAAtOutCoords_();
|
||||
a_1 = x_75;
|
||||
|
|
|
@ -4,7 +4,6 @@ cbuffer cbuffer_v : register(b0, space0) {
|
|||
|
||||
[numthreads(1, 1, 1)]
|
||||
void main() {
|
||||
const uint scalar_offset = (0u) / 4;
|
||||
const int use = (asint(v[scalar_offset / 4][scalar_offset % 4]) + 1);
|
||||
const int use = (asint(v[0].x) + 1);
|
||||
return;
|
||||
}
|
||||
|
|
|
@ -59,17 +59,14 @@ void comp_main(tint_symbol_5 tint_symbol_4) {
|
|||
}
|
||||
pos = asfloat(particlesA.Load2((16u * i))).xy;
|
||||
vel = asfloat(particlesA.Load2(((16u * i) + 8u))).xy;
|
||||
const uint scalar_offset = (4u) / 4;
|
||||
if ((distance(pos, vPos) < asfloat(params[scalar_offset / 4][scalar_offset % 4]))) {
|
||||
if ((distance(pos, vPos) < asfloat(params[0].y))) {
|
||||
cMass = (cMass + pos);
|
||||
cMassCount = (cMassCount + 1);
|
||||
}
|
||||
const uint scalar_offset_1 = (8u) / 4;
|
||||
if ((distance(pos, vPos) < asfloat(params[scalar_offset_1 / 4][scalar_offset_1 % 4]))) {
|
||||
if ((distance(pos, vPos) < asfloat(params[0].z))) {
|
||||
colVel = (colVel - (pos - vPos));
|
||||
}
|
||||
const uint scalar_offset_2 = (12u) / 4;
|
||||
if ((distance(pos, vPos) < asfloat(params[scalar_offset_2 / 4][scalar_offset_2 % 4]))) {
|
||||
if ((distance(pos, vPos) < asfloat(params[0].w))) {
|
||||
cVel = (cVel + vel);
|
||||
cVelCount = (cVelCount + 1);
|
||||
}
|
||||
|
@ -81,13 +78,9 @@ void comp_main(tint_symbol_5 tint_symbol_4) {
|
|||
if ((cVelCount > 0)) {
|
||||
cVel = (cVel / float2(float(cVelCount), float(cVelCount)));
|
||||
}
|
||||
const uint scalar_offset_3 = (16u) / 4;
|
||||
const uint scalar_offset_4 = (20u) / 4;
|
||||
const uint scalar_offset_5 = (24u) / 4;
|
||||
vVel = (((vVel + (cMass * asfloat(params[scalar_offset_3 / 4][scalar_offset_3 % 4]))) + (colVel * asfloat(params[scalar_offset_4 / 4][scalar_offset_4 % 4]))) + (cVel * asfloat(params[scalar_offset_5 / 4][scalar_offset_5 % 4])));
|
||||
vVel = (((vVel + (cMass * asfloat(params[1].x))) + (colVel * asfloat(params[1].y))) + (cVel * asfloat(params[1].z)));
|
||||
vVel = (normalize(vVel) * clamp(length(vVel), 0.0f, 0.100000001f));
|
||||
const uint scalar_offset_6 = (0u) / 4;
|
||||
vPos = (vPos + (vVel * asfloat(params[scalar_offset_6 / 4][scalar_offset_6 % 4])));
|
||||
vPos = (vPos + (vVel * asfloat(params[0].x)));
|
||||
if ((vPos.x < -1.0f)) {
|
||||
vPos.x = 1.0f;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue