// Generated by SharpEmu Gen5MslTranslator. #include using namespace metal; struct SharpEmuUniforms { uint dispatch_limit_x; uint dispatch_limit_y; uint dispatch_limit_z; uint reserved; uint buffer_bytes[1]; }; static inline uint sharpemu_load_word(device uint* b, uint bytes, uint addr) { if ((addr & 3u) == 0u) { return addr + 4u <= bytes ? b[addr >> 2] : 0u; } uint value = 0u; device const uchar* p = (device const uchar*)b; for (uint i = 0u; i < 4u; i++) { if (addr + i < bytes) { value |= (uint)p[addr + i] << (i * 8u); } } return value; } static inline uint sharpemu_load_bytes(device uint* b, uint bytes, uint addr, uint count, bool signExtend) { uint value = 0u; device const uchar* p = (device const uchar*)b; for (uint i = 0u; i < count; i++) { if (addr + i < bytes) { value |= (uint)p[addr + i] << (i * 8u); } } if (signExtend && count < 4u) { uint shift = 32u - (count * 8u); value = (uint)(((int)(value << shift)) >> shift); } return value; } static inline void sharpemu_store_bytes(device uint* b, uint bytes, uint addr, uint value, uint count) { device uchar* p = (device uchar*)b; for (uint i = 0u; i < count; i++) { if (addr + i < bytes) { p[addr + i] = (uchar)((value >> (i * 8u)) & 0xFFu); } } } static inline uint sharpemu_ballot(bool value) { return value ? 1u : 0u; } static constant float sharpemu_off_i4_table[16] = { 0.0f, 0.0625f, 0.1250f, 0.1875f, 0.2500f, 0.3125f, 0.3750f, 0.4375f, -0.5000f, -0.4375f, -0.3750f, -0.3125f, -0.2500f, -0.1875f, -0.1250f, -0.0625f, }; struct Gen5VsOut { float4 sharpemu_position [[position]]; float4 param0 [[user(locn0)]]; }; vertex Gen5VsOut gen5_vs( constant SharpEmuUniforms& sharpemu_uniforms [[buffer(0)]], uint sharpemu_vertex_id [[vertex_id]], uint sharpemu_instance_id [[instance_id]]) { const uint sharpemu_lane = 0u; uint s[128] = {}; uint v[256] = {}; bool exec = true; bool vcc = false; bool scc = false; uint pc = 0u; bool active = true; uint steps = 0u; Gen5VsOut sharpemu_out = {}; uint bias[1] = {}; v[5] = sharpemu_vertex_id; v[8] = sharpemu_instance_id; s[106] = 0u; s[107] = 0u; s[126] = sharpemu_ballot(true); s[127] = 0u; while (active) { switch (pc) { case 0u: { uint t0 = 0u; if (exec) { v[0] = t0; } uint t1 = 0x3F800000u; if (exec) { v[1] = t1; } sharpemu_out.sharpemu_position = exec ? float4(as_type(v[0]), as_type(v[0]), as_type(v[0]), as_type(v[1])) : sharpemu_out.sharpemu_position; sharpemu_out.param0 = exec ? float4(as_type(v[1]), as_type(v[1]), as_type(v[0]), as_type(v[1])) : sharpemu_out.param0; active = false; } break; default: active = false; break; } if (++steps >= 100000u) { active = false; } } return sharpemu_out; }