wgpu/tests/out/msl/skybox.msl
2022-01-25 13:25:48 -05:00

65 lines
2.0 KiB
Plaintext

// language: metal2.1
#include <metal_stdlib>
#include <simd/simd.h>
struct VertexOutput {
metal::float4 position;
metal::float3 uv;
};
struct Data {
metal::float4x4 proj_inv;
metal::float4x4 view;
};
struct vs_mainInput {
};
struct vs_mainOutput {
metal::float4 position [[position, invariant]];
metal::float3 uv [[user(loc0), center_perspective]];
};
vertex vs_mainOutput vs_main(
metal::uint vertex_index [[vertex_id]]
, constant Data& r_data [[buffer(0)]]
) {
int tmp1_;
int tmp2_;
tmp1_ = static_cast<int>(vertex_index) / 2;
tmp2_ = static_cast<int>(vertex_index) & 1;
int _e10 = tmp1_;
int _e16 = tmp2_;
metal::float4 pos = metal::float4((static_cast<float>(_e10) * 4.0) - 1.0, (static_cast<float>(_e16) * 4.0) - 1.0, 0.0, 1.0);
metal::float4 _e27 = r_data.view[0];
metal::float4 _e31 = r_data.view[1];
metal::float4 _e35 = r_data.view[2];
metal::float3x3 inv_model_view = metal::transpose(metal::float3x3(_e27.xyz, _e31.xyz, _e35.xyz));
metal::float4x4 _e40 = r_data.proj_inv;
metal::float4 unprojected = _e40 * pos;
const auto _tmp = VertexOutput {pos, inv_model_view * unprojected.xyz};
return vs_mainOutput { _tmp.position, _tmp.uv };
}
struct fs_mainInput {
metal::float3 uv [[user(loc0), center_perspective]];
};
struct fs_mainOutput {
metal::float4 member_1 [[color(0)]];
};
fragment fs_mainOutput fs_main(
fs_mainInput varyings_1 [[stage_in]]
, metal::float4 position [[position]]
, metal::texturecube<float, metal::access::sample> r_texture [[texture(0)]]
) {
constexpr metal::sampler r_sampler(
metal::s_address::clamp_to_edge,
metal::t_address::clamp_to_edge,
metal::r_address::clamp_to_edge,
metal::mag_filter::linear,
metal::min_filter::linear,
metal::coord::normalized
);
const VertexOutput in = { position, varyings_1.uv };
metal::float4 _e5 = r_texture.sample(r_sampler, in.uv);
return fs_mainOutput { _e5 };
}