cbuffer _173 { row_major float4x4 _173_projection : packoffset(c0); }; Buffer maskTexCoordTable : register(t4); static float4 gl_Position; static uint vFlags; static uint flags; static float2 mask1UV; static float2 mask2UV; static uint2 masks; static float3 vTint; static float2 vUV; static float2 uv; static float2 position; struct SPIRV_Cross_Input { float2 position : TEXCOORD0; float2 uv : TEXCOORD1; uint2 masks : TEXCOORD2; uint flags : TEXCOORD3; }; struct SPIRV_Cross_Output { float2 vUV : TEXCOORD0; float2 mask1UV : TEXCOORD1; float2 mask2UV : TEXCOORD2; nointerpolation uint vFlags : TEXCOORD3; nointerpolation float3 vTint : TEXCOORD4; float4 gl_Position : SV_Position; }; float2 getMaskUV(float2 corner, uint maskIndex) { int offset = int(maskIndex) * 4; float u = maskTexCoordTable.Load(offset + 0).x; float v = maskTexCoordTable.Load(offset + 1).x; float w = maskTexCoordTable.Load(offset + 2).x; float h = maskTexCoordTable.Load(offset + 3).x; return float2(u, v) + (corner * float2(w, h)); } float3 decodeRGB565(int rgb5) { int3 colorUnpacked = (rgb5.xxx >> int3(11, 5, 0)) & int3(31, 63, 31); return float3(float3(colorUnpacked) / float3(31.0f, 63.0f, 31.0f)); } void vert_main() { vFlags = flags; mask1UV = (-1.0f).xx; mask2UV = (-1.0f).xx; int vertexID = int(flags >> uint(2)) & 3; float2 corner = float2(float(vertexID >> 1), float(vertexID & 1)); if (masks.x != 65535u) { float2 param = corner; uint param_1 = masks.x; mask1UV = getMaskUV(param, param_1); } if (masks.y != 65535u) { float2 param_2 = corner; uint param_3 = masks.y; mask2UV = getMaskUV(param_2, param_3); } int param_4 = int(flags >> uint(16)); vTint = decodeRGB565(param_4); vUV = uv; gl_Position = mul(float4(position, 0.0f, 1.0f), _173_projection); } SPIRV_Cross_Output main(SPIRV_Cross_Input stage_input) { flags = stage_input.flags; masks = stage_input.masks; uv = stage_input.uv; position = stage_input.position; vert_main(); SPIRV_Cross_Output stage_output; stage_output.gl_Position = gl_Position; stage_output.vFlags = vFlags; stage_output.mask1UV = mask1UV; stage_output.mask2UV = mask2UV; stage_output.vTint = vTint; stage_output.vUV = vUV; return stage_output; }