I was trying to play Super Mario Strikers on a Nexus 9 running Android Marshmallow. Everything works great (framerate is definitely acceptable/playable and the intro cutscene and menus all work flawlessly) except for this glitch once I get into a match: https://drive.google.com/file/d/0B9jPJYe...cslist_api As you can see, there is a giant black spotch covering most of the field. I've noticed that certain effects show up above this, and the splotch differs depending on the field I'm playing on. The giant black bar at the top also occasionally goes away. Anyway, my question is about the panic message that pops up, as that's clearly related. Has anyone seen this or know of how to resolve it? Maybe I have an old driver or something? I tried looking around the forums for similar issues but didn't find anything.
Here's the dump file.
Here's the dump file.
Code:
#version 310 es
#define FORCE_EARLY_Z layout(early_fragment_tests) in
#define SAMPLER_BINDING(x) layout(binding = x)
#extension GL_EXT_geometry_point_size : enable
#extension GL_ANDROID_extension_pack_es31a : enable
#extension GL_EXT_texture_buffer : enable
precision highp float;
precision highp int;
precision highp sampler2DArray;
precision highp usamplerBuffer;
precision highp sampler2DMS;
#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
//Pixel Shader for TEV stages
//1 TEV stages, 1 texgens, 0 IND stages
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)); }
int itrunc(float x) { return int (trunc(x)); }
int2 itrunc(float2 x) { return int2(trunc(x)); }
int3 itrunc(float3 x) { return int3(trunc(x)); }
int4 itrunc(float4 x) { return int4(trunc(x)); }
SAMPLER_BINDING(0) uniform sampler2DArray samp[8];
layout(std140, binding = 1) uniform PSBlock {
int4 color[4];
int4 k[4];
int4 alphaRef;
float4 texdim[8];
int4 czbias[2];
int4 cindscale[2];
int4 cindmtx[6];
int4 cfogcolor;
int4 cfogi;
float4 cfogf[2];
float4 czslope;
float4 cefbscale;
};
struct VS_OUTPUT {
float4 pos;
float4 colors_0;
float4 colors_1;
float3 tex0;
float4 clipPos;
};
out vec4 ocol0;
#define depth gl_FragDepth
in VertexData {
float4 pos;
float4 colors_0;
float4 colors_1;
float3 tex0;
float4 clipPos;
};
void main()
{
float3 uv0 = tex0;
float4 rawpos = gl_FragCoord;
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 = itrunc(uv0.xy * texdim[0].zw * 128.0);
// TEV stage 0
rastemp = iround(col0 * 255.0).rgba;
tevcoord.xy = fixpoint_uv0;
textemp = iround(255.0 * texture(samp[0], float3((float2(tevcoord.xy)/128.0).xy * texdim[0].xy, 0.0))).rgba;
tevin_a = int4(int3(0,0,0), 0)&int4(255, 255, 255, 255);
tevin_b = int4(rastemp.rgb, c2.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);
depth = 1.0;
discard;
return;
}
float2 screenpos = rawpos.xy * cefbscale.xy;
screenpos.y = 528 - screenpos.y;
int zCoord = int(czslope.z + czslope.x * screenpos.x + czslope.y * screenpos.y);
zCoord = clamp(zCoord, 0, 0xFFFFFF);
depth = float(zCoord) / 16777216.0;
ocol0 = float4(prev) / 255.0;
}
0(123) : error C7011: implicit cast from "int" to "float"