gallium: remove PIPE_SHADER_CAP_OUTPUT_READ
r600g is the only driver which has made use of it. The reason the CAP was added was to fix some piglit tests when the GLSL pass lower_output_reads didn't exist. However, not removing output reads breaks the fallback for glClampColorARB, which assumes outputs are not readable. The fix would be non-trivial and my personal preference is to remove the CAP, considering that reading outputs is uncommon and that we can now use lower_output_reads to fix the issue that the CAP was supposed to workaround in the first place.
This commit is contained in:
parent
74d303521e
commit
04e3240087
|
@ -151,8 +151,6 @@ i915_get_shader_param(struct pipe_screen *screen, unsigned shader, enum pipe_sha
|
|||
return 0;
|
||||
case PIPE_SHADER_CAP_MAX_TEXTURE_SAMPLERS:
|
||||
return I915_TEX_UNITS;
|
||||
case PIPE_SHADER_CAP_OUTPUT_READ:
|
||||
return 0;
|
||||
default:
|
||||
debug_printf("%s: Unknown cap %u.\n", __FUNCTION__, cap);
|
||||
return 0;
|
||||
|
|
|
@ -206,8 +206,6 @@ nv50_screen_get_shader_param(struct pipe_screen *pscreen, unsigned shader,
|
|||
return 0;
|
||||
case PIPE_SHADER_CAP_MAX_TEXTURE_SAMPLERS:
|
||||
return 32;
|
||||
case PIPE_SHADER_CAP_OUTPUT_READ:
|
||||
return 0; /* maybe support this for fragment shaders ? */
|
||||
default:
|
||||
NOUVEAU_ERR("unknown PIPE_SHADER_CAP %d\n", param);
|
||||
return 0;
|
||||
|
|
|
@ -202,8 +202,6 @@ nvc0_screen_get_shader_param(struct pipe_screen *pscreen, unsigned shader,
|
|||
case PIPE_SHADER_CAP_MAX_TEXTURE_SAMPLER_VIEWS:
|
||||
return 32;
|
||||
*/
|
||||
case PIPE_SHADER_CAP_OUTPUT_READ:
|
||||
return 0; /* shader != PIPE_SHADER_TESSELLATION_CONTROL; */
|
||||
default:
|
||||
NOUVEAU_ERR("unknown PIPE_SHADER_CAP %d\n", param);
|
||||
return 0;
|
||||
|
|
|
@ -210,7 +210,6 @@ static int r300_get_shader_param(struct pipe_screen *pscreen, unsigned shader, e
|
|||
case PIPE_SHADER_CAP_INDIRECT_CONST_ADDR:
|
||||
case PIPE_SHADER_CAP_SUBROUTINES:
|
||||
case PIPE_SHADER_CAP_INTEGERS:
|
||||
case PIPE_SHADER_CAP_OUTPUT_READ:
|
||||
return 0;
|
||||
}
|
||||
break;
|
||||
|
@ -256,7 +255,6 @@ static int r300_get_shader_param(struct pipe_screen *pscreen, unsigned shader, e
|
|||
case PIPE_SHADER_CAP_SUBROUTINES:
|
||||
case PIPE_SHADER_CAP_INTEGERS:
|
||||
case PIPE_SHADER_CAP_MAX_TEXTURE_SAMPLERS:
|
||||
case PIPE_SHADER_CAP_OUTPUT_READ:
|
||||
return 0;
|
||||
}
|
||||
break;
|
||||
|
|
|
@ -541,8 +541,6 @@ static int r600_get_shader_param(struct pipe_screen* pscreen, unsigned shader, e
|
|||
return 0;
|
||||
case PIPE_SHADER_CAP_MAX_TEXTURE_SAMPLERS:
|
||||
return 16;
|
||||
case PIPE_SHADER_CAP_OUTPUT_READ:
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -262,8 +262,6 @@ static int svga_get_shader_param(struct pipe_screen *screen, unsigned shader, en
|
|||
return 0;
|
||||
case PIPE_SHADER_CAP_MAX_TEXTURE_SAMPLERS:
|
||||
return 16;
|
||||
case PIPE_SHADER_CAP_OUTPUT_READ:
|
||||
return 0;
|
||||
}
|
||||
break;
|
||||
case PIPE_SHADER_VERTEX:
|
||||
|
@ -307,8 +305,6 @@ static int svga_get_shader_param(struct pipe_screen *screen, unsigned shader, en
|
|||
return 0;
|
||||
case PIPE_SHADER_CAP_INTEGERS:
|
||||
return 0;
|
||||
case PIPE_SHADER_CAP_OUTPUT_READ:
|
||||
return 0;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
|
|
@ -533,7 +533,6 @@ enum pipe_shader_cap
|
|||
PIPE_SHADER_CAP_SUBROUTINES = 16, /* BGNSUB, ENDSUB, CAL, RET */
|
||||
PIPE_SHADER_CAP_INTEGERS = 17,
|
||||
PIPE_SHADER_CAP_MAX_TEXTURE_SAMPLERS = 18,
|
||||
PIPE_SHADER_CAP_OUTPUT_READ = 19
|
||||
};
|
||||
|
||||
|
||||
|
|
|
@ -4746,8 +4746,6 @@ get_mesa_program(struct gl_context *ctx,
|
|||
{
|
||||
glsl_to_tgsi_visitor* v = new glsl_to_tgsi_visitor();
|
||||
struct gl_program *prog;
|
||||
struct pipe_screen * screen = st_context(ctx)->pipe->screen;
|
||||
unsigned pipe_shader_type;
|
||||
GLenum target;
|
||||
const char *target_string;
|
||||
bool progress;
|
||||
|
@ -4758,17 +4756,14 @@ get_mesa_program(struct gl_context *ctx,
|
|||
case GL_VERTEX_SHADER:
|
||||
target = GL_VERTEX_PROGRAM_ARB;
|
||||
target_string = "vertex";
|
||||
pipe_shader_type = PIPE_SHADER_VERTEX;
|
||||
break;
|
||||
case GL_FRAGMENT_SHADER:
|
||||
target = GL_FRAGMENT_PROGRAM_ARB;
|
||||
target_string = "fragment";
|
||||
pipe_shader_type = PIPE_SHADER_FRAGMENT;
|
||||
break;
|
||||
case GL_GEOMETRY_SHADER:
|
||||
target = GL_GEOMETRY_PROGRAM_NV;
|
||||
target_string = "geometry";
|
||||
pipe_shader_type = PIPE_SHADER_GEOMETRY;
|
||||
break;
|
||||
default:
|
||||
assert(!"should not be reached");
|
||||
|
@ -4792,12 +4787,8 @@ get_mesa_program(struct gl_context *ctx,
|
|||
_mesa_generate_parameters_list_for_uniforms(shader_program, shader,
|
||||
prog->Parameters);
|
||||
|
||||
if (!screen->get_shader_param(screen, pipe_shader_type,
|
||||
PIPE_SHADER_CAP_OUTPUT_READ)) {
|
||||
/* Remove reads to output registers, and to varyings in vertex shaders. */
|
||||
lower_output_reads(shader->ir);
|
||||
}
|
||||
|
||||
/* Remove reads from output registers. */
|
||||
lower_output_reads(shader->ir);
|
||||
|
||||
/* Emit intermediate IR for main(). */
|
||||
visit_exec_list(shader->ir, v);
|
||||
|
|
Loading…
Reference in New Issue