blob: 2e42a1104f8a98279d2999cb168e827509fa6991 [file] [log] [blame]
#include <metal_stdlib>
using namespace metal;
template<typename T, size_t N>
struct tint_array {
const constant T& operator[](size_t i) const constant { return elements[i]; }
device T& operator[](size_t i) device { return elements[i]; }
const device T& operator[](size_t i) const device { return elements[i]; }
thread T& operator[](size_t i) thread { return elements[i]; }
const thread T& operator[](size_t i) const thread { return elements[i]; }
threadgroup T& operator[](size_t i) threadgroup { return elements[i]; }
const threadgroup T& operator[](size_t i) const threadgroup { return elements[i]; }
T elements[N];
};
struct tint_private_vars_struct {
float2 rand_seed;
};
struct RenderParams_tint_packed_vec3 {
/* 0x0000 */ float4x4 modelViewProjectionMatrix;
/* 0x0040 */ packed_float3 right;
/* 0x004c */ tint_array<int8_t, 4> tint_pad;
/* 0x0050 */ packed_float3 up;
/* 0x005c */ tint_array<int8_t, 4> tint_pad_1;
};
struct Particle_tint_packed_vec3 {
/* 0x0000 */ packed_float3 position;
/* 0x000c */ float lifetime;
/* 0x0010 */ float4 color;
/* 0x0020 */ float2 velocity;
/* 0x0028 */ tint_array<int8_t, 8> tint_pad_2;
};
struct Particles_tint_packed_vec3 {
/* 0x0000 */ tint_array<Particle_tint_packed_vec3, 1> particles;
};
struct Particle {
float3 position;
float lifetime;
float4 color;
float2 velocity;
};
Particle tint_unpack_vec3_in_composite(Particle_tint_packed_vec3 in) {
Particle result = {};
result.position = float3(in.position);
result.lifetime = in.lifetime;
result.color = in.color;
result.velocity = in.velocity;
return result;
}
void asinh_468a48() {
half arg_0 = 0.0h;
half res = asinh(arg_0);
}
struct tint_symbol_1 {
float4 value [[position]];
};
float4 vertex_main_inner() {
asinh_468a48();
return float4(0.0f);
}
vertex tint_symbol_1 vertex_main() {
float4 const inner_result = vertex_main_inner();
tint_symbol_1 wrapper_result = {};
wrapper_result.value = inner_result;
return wrapper_result;
}
fragment void fragment_main() {
asinh_468a48();
return;
}
kernel void rgba32uintin() {
asinh_468a48();
return;
}
struct TestData {
tint_array<atomic_int, 4> dmat2atxa2;
};
struct RenderParams {
float4x4 modelViewProjectionMatrix;
float3 right;
float3 up;
};
struct VertexInput {
float3 position;
float4 color;
float2 quad_pos;
};
struct VertexOutput {
float4 position;
float4 color;
float2 quad_pos;
};
struct tint_symbol_3 {
float3 position [[attribute(0)]];
float4 color [[attribute(1)]];
float2 quad_pos [[attribute(2)]];
};
struct tint_symbol_4 {
float4 color [[user(locn0)]];
float2 quad_pos [[user(locn1)]];
float4 position [[position]];
};
VertexOutput vs_main_inner(VertexInput in, const constant RenderParams_tint_packed_vec3* const tint_symbol_6) {
float3 quad_pos = (float2x3(float3((*(tint_symbol_6)).right), float3((*(tint_symbol_6)).up)) * in.quad_pos);
float3 position = (in.position - (quad_pos + 0.00999999977648258209f));
VertexOutput out = {};
out.position = ((*(tint_symbol_6)).modelViewProjectionMatrix * float4(position, 1.0f));
out.color = in.color;
out.quad_pos = in.quad_pos;
return out;
}
vertex tint_symbol_4 vs_main(const constant RenderParams_tint_packed_vec3* tint_symbol_7 [[buffer(0)]], tint_symbol_3 tint_symbol_2 [[stage_in]]) {
VertexInput const tint_symbol_5 = VertexInput{.position=tint_symbol_2.position, .color=tint_symbol_2.color, .quad_pos=tint_symbol_2.quad_pos};
VertexOutput const inner_result_1 = vs_main_inner(tint_symbol_5, tint_symbol_7);
tint_symbol_4 wrapper_result_1 = {};
wrapper_result_1.position = inner_result_1.position;
wrapper_result_1.color = inner_result_1.color;
wrapper_result_1.quad_pos = inner_result_1.quad_pos;
return wrapper_result_1;
}
struct SimulationParams {
/* 0x0000 */ float deltaTime;
/* 0x0004 */ tint_array<int8_t, 12> tint_pad_3;
/* 0x0010 */ float4 seed;
};
struct Particles {
tint_array<Particle, 1> particles;
};
void assign_and_preserve_padding(device Particle_tint_packed_vec3* const dest, Particle value) {
(*(dest)).position = packed_float3(value.position);
(*(dest)).lifetime = value.lifetime;
(*(dest)).color = value.color;
(*(dest)).velocity = value.velocity;
}
void simulate_inner(uint3 GlobalInvocationID, thread tint_private_vars_struct* const tint_private_vars, const constant SimulationParams* const tint_symbol_8, device Particles_tint_packed_vec3* const tint_symbol_9) {
(*(tint_private_vars)).rand_seed = (((*(tint_symbol_8)).seed.xy * float2(GlobalInvocationID.xy)) * (*(tint_symbol_8)).seed.zw);
uint const idx = GlobalInvocationID[0];
Particle particle = tint_unpack_vec3_in_composite((*(tint_symbol_9)).particles[idx]);
assign_and_preserve_padding(&((*(tint_symbol_9)).particles[idx]), particle);
}
kernel void simulate(const constant SimulationParams* tint_symbol_10 [[buffer(1)]], device Particles_tint_packed_vec3* tint_symbol_11 [[buffer(2)]], uint3 GlobalInvocationID [[thread_position_in_grid]]) {
thread tint_private_vars_struct tint_private_vars = {};
simulate_inner(GlobalInvocationID, &(tint_private_vars), tint_symbol_10, tint_symbol_11);
return;
}
struct UBO {
/* 0x0000 */ uint width;
};
struct Buffer {
/* 0x0000 */ tint_array<float, 1> weights;
};
void export_level_inner(uint3 coord, texture2d<float, access::write> tint_symbol_12, const constant UBO* const tint_symbol_13, const device Buffer* const tint_symbol_14, device Buffer* const tint_symbol_15) {
if (all((coord.xy < uint2(uint2(tint_symbol_12.get_width(), tint_symbol_12.get_height()))))) {
uint const dst_offset = (coord[0] << ((coord[1] * (*(tint_symbol_13)).width) & 31u));
uint const src_offset = ((coord[0] - 2u) + ((coord[1] >> 2u) * (*(tint_symbol_13)).width));
float const a = (*(tint_symbol_14)).weights[(src_offset << 0u)];
float const b = (*(tint_symbol_14)).weights[(src_offset + 1u)];
float const c = (*(tint_symbol_14)).weights[((src_offset + 1u) + (*(tint_symbol_13)).width)];
float const d = (*(tint_symbol_14)).weights[((src_offset + 1u) + (*(tint_symbol_13)).width)];
float const sum = dot(float4(a, b, c, d), float4(1.0f));
(*(tint_symbol_15)).weights[dst_offset] = fmod(sum, 4.0f);
float4 const probabilities = (float4(a, (a * b), ((a / b) + c), sum) + fmax(sum, 0.0f));
tint_symbol_12.write(probabilities, uint2(int2(coord.xy)));
}
}
kernel void export_level(texture2d<float, access::write> tint_symbol_16 [[texture(0)]], const constant UBO* tint_symbol_17 [[buffer(3)]], const device Buffer* tint_symbol_18 [[buffer(4)]], device Buffer* tint_symbol_19 [[buffer(0)]], uint3 coord [[thread_position_in_grid]]) {
export_level_inner(coord, tint_symbol_16, tint_symbol_17, tint_symbol_18, tint_symbol_19);
return;
}