wgpu/naga/tests/out/msl/image.msl

270 lines
13 KiB
Plaintext
Raw Normal View History

// language: metal1.0
2021-04-23 16:31:33 +00:00
#include <metal_stdlib>
#include <simd/simd.h>
using metal::uint;
2021-04-23 16:31:33 +00:00
struct main_Input {
2021-04-23 16:31:33 +00:00
};
kernel void main_(
2021-04-23 16:31:33 +00:00
metal::uint3 local_id [[thread_position_in_threadgroup]]
, metal::texture2d<uint, metal::access::sample> image_mipmapped_src [[user(fake0)]]
, metal::texture2d_ms<uint, metal::access::read> image_multisampled_src [[user(fake0)]]
, metal::texture2d<uint, metal::access::read> image_storage_src [[user(fake0)]]
, metal::texture2d_array<uint, metal::access::sample> image_array_src [[user(fake0)]]
, metal::texture1d<uint, metal::access::sample> image_1d_src [[user(fake0)]]
2021-04-23 16:31:33 +00:00
, metal::texture1d<uint, metal::access::write> image_dst [[user(fake0)]]
) {
metal::uint2 dim = metal::uint2(image_storage_src.get_width(), image_storage_src.get_height());
metal::int2 itc = static_cast<metal::int2>(dim * local_id.xy) % metal::int2(10, 20);
metal::uint4 value1_ = image_mipmapped_src.read(metal::uint2(itc), static_cast<int>(local_id.z));
metal::uint4 value2_ = image_multisampled_src.read(metal::uint2(itc), static_cast<int>(local_id.z));
metal::uint4 value4_ = image_storage_src.read(metal::uint2(itc));
metal::uint4 value5_ = image_array_src.read(metal::uint2(itc), local_id.z, static_cast<int>(local_id.z) + 1);
metal::uint4 value6_ = image_array_src.read(metal::uint2(itc), static_cast<int>(local_id.z), static_cast<int>(local_id.z) + 1);
metal::uint4 value7_ = image_1d_src.read(uint(static_cast<int>(local_id.x)));
metal::uint4 value1u = image_mipmapped_src.read(metal::uint2(static_cast<metal::uint2>(itc)), static_cast<int>(local_id.z));
metal::uint4 value2u = image_multisampled_src.read(metal::uint2(static_cast<metal::uint2>(itc)), static_cast<int>(local_id.z));
metal::uint4 value4u = image_storage_src.read(metal::uint2(static_cast<metal::uint2>(itc)));
metal::uint4 value5u = image_array_src.read(metal::uint2(static_cast<metal::uint2>(itc)), local_id.z, static_cast<int>(local_id.z) + 1);
metal::uint4 value6u = image_array_src.read(metal::uint2(static_cast<metal::uint2>(itc)), static_cast<int>(local_id.z), static_cast<int>(local_id.z) + 1);
metal::uint4 value7u = image_1d_src.read(uint(static_cast<uint>(local_id.x)));
image_dst.write((((value1_ + value2_) + value4_) + value5_) + value6_, uint(itc.x));
image_dst.write((((value1u + value2u) + value4u) + value5u) + value6u, uint(static_cast<uint>(itc.x)));
return;
}
struct depth_loadInput {
};
kernel void depth_load(
metal::uint3 local_id_1 [[thread_position_in_threadgroup]]
, metal::depth2d_ms<float, metal::access::read> image_depth_multisampled_src [[user(fake0)]]
, metal::texture2d<uint, metal::access::read> image_storage_src [[user(fake0)]]
, metal::texture1d<uint, metal::access::write> image_dst [[user(fake0)]]
) {
metal::uint2 dim_1 = metal::uint2(image_storage_src.get_width(), image_storage_src.get_height());
metal::int2 itc_1 = static_cast<metal::int2>(dim_1 * local_id_1.xy) % metal::int2(10, 20);
float val = image_depth_multisampled_src.read(metal::uint2(itc_1), static_cast<int>(local_id_1.z));
image_dst.write(metal::uint4(static_cast<uint>(val)), uint(itc_1.x));
2021-04-23 16:31:33 +00:00
return;
}
struct queriesOutput {
metal::float4 member_2 [[position]];
2021-04-23 16:31:33 +00:00
};
vertex queriesOutput queries(
metal::texture1d<float, metal::access::sample> image_1d [[user(fake0)]]
, metal::texture2d<float, metal::access::sample> image_2d [[user(fake0)]]
, metal::texture2d_array<float, metal::access::sample> image_2d_array [[user(fake0)]]
, metal::texturecube<float, metal::access::sample> image_cube [[user(fake0)]]
, metal::texturecube_array<float, metal::access::sample> image_cube_array [[user(fake0)]]
, metal::texture3d<float, metal::access::sample> image_3d [[user(fake0)]]
, metal::texture2d_ms<float, metal::access::read> image_aa [[user(fake0)]]
2021-04-23 16:31:33 +00:00
) {
uint dim_1d = image_1d.get_width();
uint dim_1d_lod = image_1d.get_width();
metal::uint2 dim_2d = metal::uint2(image_2d.get_width(), image_2d.get_height());
metal::uint2 dim_2d_lod = metal::uint2(image_2d.get_width(1), image_2d.get_height(1));
metal::uint2 dim_2d_array = metal::uint2(image_2d_array.get_width(), image_2d_array.get_height());
metal::uint2 dim_2d_array_lod = metal::uint2(image_2d_array.get_width(1), image_2d_array.get_height(1));
metal::uint2 dim_cube = metal::uint2(image_cube.get_width());
metal::uint2 dim_cube_lod = metal::uint2(image_cube.get_width(1));
metal::uint2 dim_cube_array = metal::uint2(image_cube_array.get_width());
metal::uint2 dim_cube_array_lod = metal::uint2(image_cube_array.get_width(1));
metal::uint3 dim_3d = metal::uint3(image_3d.get_width(), image_3d.get_height(), image_3d.get_depth());
metal::uint3 dim_3d_lod = metal::uint3(image_3d.get_width(1), image_3d.get_height(1), image_3d.get_depth(1));
metal::uint2 dim_2s_ms = metal::uint2(image_aa.get_width(), image_aa.get_height());
uint sum = (((((((((dim_1d + dim_2d.y) + dim_2d_lod.y) + dim_2d_array.y) + dim_2d_array_lod.y) + dim_cube.y) + dim_cube_lod.y) + dim_cube_array.y) + dim_cube_array_lod.y) + dim_3d.z) + dim_3d_lod.z;
return queriesOutput { metal::float4(static_cast<float>(sum)) };
2021-04-23 16:31:33 +00:00
}
2021-05-29 02:39:18 +00:00
struct levels_queriesOutput {
metal::float4 member_3 [[position]];
};
vertex levels_queriesOutput levels_queries(
metal::texture2d<float, metal::access::sample> image_2d [[user(fake0)]]
, metal::texture2d_array<float, metal::access::sample> image_2d_array [[user(fake0)]]
, metal::texturecube<float, metal::access::sample> image_cube [[user(fake0)]]
, metal::texturecube_array<float, metal::access::sample> image_cube_array [[user(fake0)]]
, metal::texture3d<float, metal::access::sample> image_3d [[user(fake0)]]
, metal::texture2d_ms<float, metal::access::read> image_aa [[user(fake0)]]
) {
uint num_levels_2d = image_2d.get_num_mip_levels();
uint num_layers_2d = image_2d_array.get_array_size();
uint num_levels_2d_array = image_2d_array.get_num_mip_levels();
uint num_layers_2d_array = image_2d_array.get_array_size();
uint num_levels_cube = image_cube.get_num_mip_levels();
uint num_levels_cube_array = image_cube_array.get_num_mip_levels();
uint num_layers_cube = image_cube_array.get_array_size();
uint num_levels_3d = image_3d.get_num_mip_levels();
uint num_samples_aa = image_aa.get_num_samples();
uint sum_1 = ((((((num_layers_2d + num_layers_cube) + num_samples_aa) + num_levels_2d) + num_levels_2d_array) + num_levels_3d) + num_levels_cube) + num_levels_cube_array;
return levels_queriesOutput { metal::float4(static_cast<float>(sum_1)) };
}
struct texture_sampleOutput {
metal::float4 member_4 [[color(0)]];
};
fragment texture_sampleOutput texture_sample(
metal::texture1d<float, metal::access::sample> image_1d [[user(fake0)]]
, metal::texture2d<float, metal::access::sample> image_2d [[user(fake0)]]
, metal::texture2d_array<float, metal::access::sample> image_2d_array [[user(fake0)]]
, metal::texturecube_array<float, metal::access::sample> image_cube_array [[user(fake0)]]
, metal::sampler sampler_reg [[user(fake0)]]
) {
metal::float4 a = {};
metal::float2 tc = metal::float2(0.5);
metal::float3 tc3_ = metal::float3(0.5);
metal::float4 _e9 = image_1d.sample(sampler_reg, tc.x);
metal::float4 _e10 = a;
a = _e10 + _e9;
metal::float4 _e14 = image_2d.sample(sampler_reg, tc);
metal::float4 _e15 = a;
a = _e15 + _e14;
metal::float4 _e19 = image_2d.sample(sampler_reg, tc, metal::int2(3, 1));
metal::float4 _e20 = a;
a = _e20 + _e19;
metal::float4 _e24 = image_2d.sample(sampler_reg, tc, metal::level(2.3));
metal::float4 _e25 = a;
a = _e25 + _e24;
metal::float4 _e29 = image_2d.sample(sampler_reg, tc, metal::level(2.3), metal::int2(3, 1));
metal::float4 _e30 = a;
a = _e30 + _e29;
metal::float4 _e35 = image_2d.sample(sampler_reg, tc, metal::bias(2.0), metal::int2(3, 1));
metal::float4 _e36 = a;
a = _e36 + _e35;
metal::float4 _e41 = image_2d_array.sample(sampler_reg, tc, 0u);
metal::float4 _e42 = a;
a = _e42 + _e41;
metal::float4 _e47 = image_2d_array.sample(sampler_reg, tc, 0u, metal::int2(3, 1));
metal::float4 _e48 = a;
a = _e48 + _e47;
metal::float4 _e53 = image_2d_array.sample(sampler_reg, tc, 0u, metal::level(2.3));
metal::float4 _e54 = a;
a = _e54 + _e53;
metal::float4 _e59 = image_2d_array.sample(sampler_reg, tc, 0u, metal::level(2.3), metal::int2(3, 1));
metal::float4 _e60 = a;
a = _e60 + _e59;
metal::float4 _e66 = image_2d_array.sample(sampler_reg, tc, 0u, metal::bias(2.0), metal::int2(3, 1));
metal::float4 _e67 = a;
a = _e67 + _e66;
metal::float4 _e72 = image_2d_array.sample(sampler_reg, tc, 0);
metal::float4 _e73 = a;
a = _e73 + _e72;
metal::float4 _e78 = image_2d_array.sample(sampler_reg, tc, 0, metal::int2(3, 1));
metal::float4 _e79 = a;
a = _e79 + _e78;
metal::float4 _e84 = image_2d_array.sample(sampler_reg, tc, 0, metal::level(2.3));
metal::float4 _e85 = a;
a = _e85 + _e84;
metal::float4 _e90 = image_2d_array.sample(sampler_reg, tc, 0, metal::level(2.3), metal::int2(3, 1));
metal::float4 _e91 = a;
a = _e91 + _e90;
metal::float4 _e97 = image_2d_array.sample(sampler_reg, tc, 0, metal::bias(2.0), metal::int2(3, 1));
metal::float4 _e98 = a;
a = _e98 + _e97;
metal::float4 _e103 = image_cube_array.sample(sampler_reg, tc3_, 0u);
metal::float4 _e104 = a;
a = _e104 + _e103;
metal::float4 _e109 = image_cube_array.sample(sampler_reg, tc3_, 0u, metal::level(2.3));
metal::float4 _e110 = a;
a = _e110 + _e109;
metal::float4 _e116 = image_cube_array.sample(sampler_reg, tc3_, 0u, metal::bias(2.0));
metal::float4 _e117 = a;
a = _e117 + _e116;
metal::float4 _e122 = image_cube_array.sample(sampler_reg, tc3_, 0);
metal::float4 _e123 = a;
a = _e123 + _e122;
metal::float4 _e128 = image_cube_array.sample(sampler_reg, tc3_, 0, metal::level(2.3));
metal::float4 _e129 = a;
a = _e129 + _e128;
metal::float4 _e135 = image_cube_array.sample(sampler_reg, tc3_, 0, metal::bias(2.0));
metal::float4 _e136 = a;
a = _e136 + _e135;
metal::float4 _e138 = a;
return texture_sampleOutput { _e138 };
}
struct texture_sample_comparisonOutput {
float member_5 [[color(0)]];
2021-05-29 02:39:18 +00:00
};
fragment texture_sample_comparisonOutput texture_sample_comparison(
2021-05-29 02:39:18 +00:00
metal::sampler sampler_cmp [[user(fake0)]]
, metal::depth2d<float, metal::access::sample> image_2d_depth [[user(fake0)]]
, metal::depth2d_array<float, metal::access::sample> image_2d_array_depth [[user(fake0)]]
, metal::depthcube<float, metal::access::sample> image_cube_depth [[user(fake0)]]
2021-05-29 02:39:18 +00:00
) {
float a_1 = {};
metal::float2 tc_1 = metal::float2(0.5);
metal::float3 tc3_1 = metal::float3(0.5);
float _e8 = image_2d_depth.sample_compare(sampler_cmp, tc_1, 0.5);
float _e9 = a_1;
a_1 = _e9 + _e8;
float _e14 = image_2d_array_depth.sample_compare(sampler_cmp, tc_1, 0u, 0.5);
float _e15 = a_1;
a_1 = _e15 + _e14;
float _e20 = image_2d_array_depth.sample_compare(sampler_cmp, tc_1, 0, 0.5);
float _e21 = a_1;
a_1 = _e21 + _e20;
float _e25 = image_cube_depth.sample_compare(sampler_cmp, tc3_1, 0.5);
float _e26 = a_1;
a_1 = _e26 + _e25;
float _e30 = image_2d_depth.sample_compare(sampler_cmp, tc_1, 0.5);
float _e31 = a_1;
a_1 = _e31 + _e30;
float _e36 = image_2d_array_depth.sample_compare(sampler_cmp, tc_1, 0u, 0.5);
float _e37 = a_1;
a_1 = _e37 + _e36;
float _e42 = image_2d_array_depth.sample_compare(sampler_cmp, tc_1, 0, 0.5);
float _e43 = a_1;
a_1 = _e43 + _e42;
float _e47 = image_cube_depth.sample_compare(sampler_cmp, tc3_1, 0.5);
float _e48 = a_1;
a_1 = _e48 + _e47;
float _e50 = a_1;
return texture_sample_comparisonOutput { _e50 };
2021-05-29 02:39:18 +00:00
}
2021-12-15 05:29:07 +00:00
struct gatherOutput {
metal::float4 member_6 [[color(0)]];
};
fragment gatherOutput gather(
metal::texture2d<float, metal::access::sample> image_2d [[user(fake0)]]
, metal::texture2d<uint, metal::access::sample> image_2d_u32_ [[user(fake0)]]
, metal::texture2d<int, metal::access::sample> image_2d_i32_ [[user(fake0)]]
2021-12-15 05:29:07 +00:00
, metal::sampler sampler_reg [[user(fake0)]]
, metal::sampler sampler_cmp [[user(fake0)]]
, metal::depth2d<float, metal::access::sample> image_2d_depth [[user(fake0)]]
) {
metal::float2 tc_2 = metal::float2(0.5);
metal::float4 s2d = image_2d.gather(sampler_reg, tc_2, metal::int2(0), metal::component::y);
2023-04-05 15:38:03 +00:00
metal::float4 s2d_offset = image_2d.gather(sampler_reg, tc_2, metal::int2(3, 1), metal::component::w);
metal::float4 s2d_depth = image_2d_depth.gather_compare(sampler_cmp, tc_2, 0.5);
2023-04-05 15:38:03 +00:00
metal::float4 s2d_depth_offset = image_2d_depth.gather_compare(sampler_cmp, tc_2, 0.5, metal::int2(3, 1));
metal::uint4 u = image_2d_u32_.gather(sampler_reg, tc_2);
metal::int4 i = image_2d_i32_.gather(sampler_reg, tc_2);
metal::float4 f = static_cast<metal::float4>(u) + static_cast<metal::float4>(i);
return gatherOutput { (((s2d + s2d_offset) + s2d_depth) + s2d_depth_offset) + f };
2021-12-15 05:29:07 +00:00
}
struct depth_no_comparisonOutput {
metal::float4 member_7 [[color(0)]];
};
fragment depth_no_comparisonOutput depth_no_comparison(
metal::sampler sampler_reg [[user(fake0)]]
, metal::depth2d<float, metal::access::sample> image_2d_depth [[user(fake0)]]
) {
metal::float2 tc_3 = metal::float2(0.5);
float s2d_1 = image_2d_depth.sample(sampler_reg, tc_3);
2021-12-15 05:29:07 +00:00
metal::float4 s2d_gather = image_2d_depth.gather(sampler_reg, tc_3);
return depth_no_comparisonOutput { metal::float4(s2d_1) + s2d_gather };
2021-12-15 05:29:07 +00:00
}