SPIRV-Cross/reference/opt/shaders-msl/tese/in-block-with-nested-struct.raw-tess-in.tese
Chip Davis a171087180 MSL: Support "raw" buffer input in tessellation evaluation shaders.
Using vertex-style stage input is complex, and it doesn't support
nesting of structures or arrays. By using raw buffer input instead, we
get this support "for free," and everything becomes much simpler.
Arguably, this is the way I should've done this in the first place.

Eventually, I'd like to make this the default, and then remove the
option altogether. (And I still need to do that with
`multi_patch_workgroup`...)

Should help fix 66 tests in the Vulkan CTS, under the following trees:

 - `dEQP-VK.pipeline.*.interface_matching.*`
 - `dEQP-VK.tessellation.user_defined_io.*`
 - `dEQP-VK.clipping.user_defined.*`
2022-10-18 14:58:59 -07:00

39 lines
1007 B
GLSL

#include <metal_stdlib>
#include <simd/simd.h>
using namespace metal;
struct t35
{
float2 m0;
float4 m1;
};
struct t36
{
float2 m0;
t35 m1;
};
struct main0_out
{
float v80 [[user(locn0)]];
float4 gl_Position [[position]];
};
struct main0_in
{
float2 v40_m0;
t35 v40_m1;
};
[[ patch(triangle, 0) ]] vertex main0_out main0(float3 gl_TessCoord [[position_in_patch]], uint gl_PrimitiveID [[patch_id]], const device main0_in* spvIn [[buffer(22)]])
{
main0_out out = {};
const device main0_in* gl_in = &spvIn[gl_PrimitiveID * 0];
out.gl_Position = float4((gl_TessCoord.xy * 2.0) - float2(1.0), 0.0, 1.0);
out.v80 = ((float(abs(gl_in[0].v40_m1.m1.x - (-4.0)) < 0.001000000047497451305389404296875) * float(abs(gl_in[0].v40_m1.m1.y - (-9.0)) < 0.001000000047497451305389404296875)) * float(abs(gl_in[0].v40_m1.m1.z - 3.0) < 0.001000000047497451305389404296875)) * float(abs(gl_in[0].v40_m1.m1.w - 7.0) < 0.001000000047497451305389404296875);
return out;
}