Workaround for nvidia bug with dynamic local memory access.

This commit is contained in:
Ben Vanik 2015-12-07 22:55:17 -08:00
parent ec113275dc
commit 85b1797b9e
1 changed files with 14 additions and 6 deletions

View File

@ -111,8 +111,8 @@ struct StateData {
vec4 window_scale; vec4 window_scale;
vec4 vtx_fmt; vec4 vtx_fmt;
vec4 alpha_test; vec4 alpha_test;
int ps_param_gen; uint ps_param_gen;
int padding[3]; uint padding[3];
// TODO(benvanik): variable length. // TODO(benvanik): variable length.
uvec2 texture_samplers[32]; uvec2 texture_samplers[32];
uint texture_swizzles[32]; uint texture_swizzles[32];
@ -304,10 +304,18 @@ void main() {
for (int i = 0; i < kMaxInterpolators; ++i) { for (int i = 0; i < kMaxInterpolators; ++i) {
EmitSource(" r[%d] = vtx.o[%d];\n", i, i); EmitSource(" r[%d] = vtx.o[%d];\n", i, i);
} }
EmitSource(" if (state.ps_param_gen != -1) {\n"); EmitSource(" if (state.ps_param_gen < 16) {\n");
EmitSource(" pv = vec4(gl_FragCoord.xy, gl_PointCoord.xy);\n"); EmitSource(
EmitSource(" pv.x *= (gl_FrontFacing ? 1.0 : -1.0);\n"); " vec4 ps_param_gen = vec4(gl_FragCoord.xy, gl_PointCoord.xy);\n");
EmitSource(" r[state.ps_param_gen] = pv;\n"); EmitSource(" ps_param_gen.x *= (gl_FrontFacing ? 1.0 : -1.0);\n");
// This is insane, but r[ps_param_gen] causes nvidia to fully deopt?
// EmitSource(" r[state.ps_param_gen] = ps_param_gen;\n");
EmitSource(" if (state.ps_param_gen == 0) r[0] = ps_param_gen;\n");
for (int i = 1; i < kMaxInterpolators; ++i) {
EmitSource(
" else if (state.ps_param_gen == %d) r[%d] = ps_param_gen;\n", i,
i);
}
EmitSource(" }\n"); EmitSource(" }\n");
} }