// Target GLSL 4.5. #version 450 core #define ATTRIBUTE_LOCATION(x) layout(location = x) #define FRAGMENT_OUTPUT_LOCATION(x) layout(location = x) #define FRAGMENT_OUTPUT_LOCATION_INDEXED(x, y) layout(location = x, index = y) #define UBO_BINDING(packing, x) layout(packing, binding = (x - 1)) #define SAMPLER_BINDING(x) layout(binding = x) #define TEXEL_BUFFER_BINDING(x) layout(binding = x) #define SSBO_BINDING(x) layout(binding = (x + 2)) #define VARYING_LOCATION(x) layout(location = x) #define FORCE_EARLY_Z layout(early_fragment_tests) in // hlsl to glsl function translation #define float2 vec2 #define float3 vec3 #define float4 vec4 #define uint2 uvec2 #define uint3 uvec3 #define uint4 uvec4 #define int2 ivec2 #define int3 ivec3 #define int4 ivec4 #define frac fract #define lerp mix #define API_D3D 1 // Pixel Shader for TEV stages // 1 TEV stages, 1 texgens, 0 IND stages uint bitfieldExtract(uint val, int off, int size) { // This built-in function is only supported in OpenGL 4.0+ and ES 3.1+ // Microsoft's HLSL compiler automatically optimises this to a bitfield extract instruction. uint mask = uint((1 << size) - 1); return uint(val >> off) & mask; } int bitfieldExtract(int val, int off, int size) { // This built-in function is only supported in OpenGL 4.0+ and ES 3.1+ // Microsoft's HLSL compiler automatically optimises this to a bitfield extract instruction. return ((val << (32 - size - off)) >> (32 - size)); } int idot(int3 x, int3 y) { int3 tmp = x * y; return tmp.x + tmp.y + tmp.z; } int idot(int4 x, int4 y) { int4 tmp = x * y; return tmp.x + tmp.y + tmp.z + tmp.w; } int iround(float x) { return int (round(x)); } int2 iround(float2 x) { return int2(round(x)); } int3 iround(float3 x) { return int3(round(x)); } int4 iround(float4 x) { return int4(round(x)); } SAMPLER_BINDING(0) uniform sampler2DArray samp[8]; UBO_BINDING(std140, 1) uniform PSBlock { int4 color[4]; int4 k[4]; int4 alphaRef; int4 texdim[8]; int4 czbias[2]; int4 cindscale[2]; int4 cindmtx[6]; int4 cfogcolor; int4 cfogi; float4 cfogf; float4 cfogrange[3]; float4 czslope; float2 cefbscale; uint bpmem_genmode; uint bpmem_alphaTest; uint bpmem_fogParam3; uint bpmem_fogRangeBase; uint bpmem_dstalpha; uint bpmem_ztex_op; bool bpmem_late_ztest; bool bpmem_rgba6_format; bool bpmem_dither; bool bpmem_bounding_box; uint4 bpmem_pack1[16]; uint4 bpmem_pack2[8]; int4 konstLookup[32]; bool blend_enable; uint blend_src_factor; uint blend_src_factor_alpha; uint blend_dst_factor; uint blend_dst_factor_alpha; bool blend_subtract; bool blend_subtract_alpha; bool logic_op_enable; uint logic_op_mode; }; #define bpmem_combiners(i) (bpmem_pack1[(i)].xy) #define bpmem_tevind(i) (bpmem_pack1[(i)].z) #define bpmem_iref(i) (bpmem_pack1[(i)].w) #define bpmem_tevorder(i) (bpmem_pack2[(i)].x) #define bpmem_tevksel(i) (bpmem_pack2[(i)].y) #define samp_texmode0(i) (bpmem_pack2[(i)].z) #define samp_texmode1(i) (bpmem_pack2[(i)].w) int4 sampleTexture(uint texmap, in sampler2DArray tex, int2 uv, int layer) { float size_s = float(texdim[texmap].x * 128); float size_t = float(texdim[texmap].y * 128); float3 coords = float3(float(uv.x) / size_s, float(uv.y) / size_t, layer); return iround(255.0 * texture(tex, coords)); } #define sampleTextureWrapper(texmap, uv, layer) sampleTexture(texmap, samp[texmap], uv, layer) FRAGMENT_OUTPUT_LOCATION_INDEXED(0, 0) out uvec4 ocol0; FRAGMENT_OUTPUT_LOCATION_INDEXED(0, 1) out uvec4 ocol1; VARYING_LOCATION(0) in VertexData { centroid in float4 pos; centroid in float4 colors_0; centroid in float4 colors_1; centroid in float clipDist0; centroid in float clipDist1; centroid in float3 tex0; }; void main() { float4 rawpos = gl_FragCoord; int layer = 0; int4 c0 = color[1], c1 = color[2], c2 = color[3], prev = color[0]; int4 rastemp = int4(0, 0, 0, 0), textemp = int4(0, 0, 0, 0), konsttemp = int4(0, 0, 0, 0); int3 comp16 = int3(1, 256, 0), comp24 = int3(1, 256, 256*256); int alphabump=0; int3 tevcoord=int3(0, 0, 0); int2 wrappedcoord=int2(0,0), tempcoord=int2(0,0); int4 tevin_a=int4(0,0,0,0),tevin_b=int4(0,0,0,0),tevin_c=int4(0,0,0,0),tevin_d=int4(0,0,0,0); float4 col0 = colors_0; float4 col1 = colors_1; int2 fixpoint_uv0 = int2((tex0.z == 0.0 ? tex0.xy : tex0.xy / tex0.z) * float2(texdim[0].zw * 128)); // TEV stage 0 // indirect op int2 indtevtrans0 = int2(0, 0); wrappedcoord.x = fixpoint_uv0.x; wrappedcoord.y = fixpoint_uv0.y; tevcoord.xy = wrappedcoord + indtevtrans0; tevcoord.xy = (tevcoord.xy << 8) >> 8; textemp = sampleTextureWrapper(2u, tevcoord.xy, layer).rgba; tevin_a = int4(int3(0,0,0), 0)&int4(255, 255, 255, 255); tevin_b = int4(c0.rgb, c0.a)&int4(255, 255, 255, 255); tevin_c = int4(textemp.rgb, textemp.a)&int4(255, 255, 255, 255); tevin_d = int4(int3(0,0,0), 0); // color combine prev.rgb = clamp((((tevin_d.rgb)) + (((((tevin_a.rgb<<8) + (tevin_b.rgb-tevin_a.rgb)*(tevin_c.rgb+(tevin_c.rgb>>7)))) + 128)>>8)), int3(0,0,0), int3(255,255,255)); // alpha combine prev.a = clamp((((tevin_d.a)) + (((((tevin_a.a<<8) + (tevin_b.a-tevin_a.a)*(tevin_c.a+(tevin_c.a>>7)))) + 128)>>8)), 0, 255); prev = prev & 255; if(!( (prev.a > alphaRef.r) && (prev.a <= alphaRef.g))) { ocol0 = float4(0.0, 0.0, 0.0, 0.0); discard; return; } // Hardware testing indicates that an alpha of 1 can pass an alpha test, // but doesn't do anything in blending if (prev.a == 1) prev.a = 0; int zCoord = int((1.0 - rawpos.z) * 16777216.0); zCoord = clamp(zCoord, 0, 0xFFFFFF); ocol0 = uint4(prev); } Failed to parse shader Shader Info Log: ERROR: 0:160: 'assign' : cannot convert from ' const 4-component vector of float' to 'layout( location=0 index=0) out 4-component vector of uint' ERROR: 0:160: '' : compilation terminated ERROR: 2 compilation errors. No code generated. Dolphin Version: Dolphin 5.0-17620 Video Backend: Direct3D 11