Some drivers support integers only in vertex shaders (e.g. those which use Draw).
Const.NativeIntegers is now useless for Gallium. --- src/mesa/state_tracker/st_glsl_to_tgsi.cpp | 28 ++++++++++++++++++++++++++-- 1 files changed, 26 insertions(+), 2 deletions(-) diff --git a/src/mesa/state_tracker/st_glsl_to_tgsi.cpp b/src/mesa/state_tracker/st_glsl_to_tgsi.cpp index b6abe84..9fa298f 100644 --- a/src/mesa/state_tracker/st_glsl_to_tgsi.cpp +++ b/src/mesa/state_tracker/st_glsl_to_tgsi.cpp @@ -4742,6 +4742,22 @@ out: } /* ----------------------------- End TGSI code ------------------------------ */ +static unsigned +gl_shader_to_pipe_shader(unsigned gl_shader) +{ + switch (gl_shader) { + case GL_VERTEX_SHADER: + return PIPE_SHADER_VERTEX; + case GL_GEOMETRY_SHADER: + return PIPE_SHADER_GEOMETRY; + case GL_FRAGMENT_SHADER: + return PIPE_SHADER_FRAGMENT; + default: + assert(!"should not be reached"); + return 0; + } +} + /** * Convert a shader's GLSL IR into a Mesa gl_program, although without * generating Mesa IR. @@ -4751,6 +4767,7 @@ get_mesa_program(struct gl_context *ctx, struct gl_shader_program *shader_program, struct gl_shader *shader) { + struct pipe_screen *screen = st_context(ctx)->pipe->screen; glsl_to_tgsi_visitor* v = new glsl_to_tgsi_visitor(); struct gl_program *prog; GLenum target; @@ -4788,7 +4805,10 @@ get_mesa_program(struct gl_context *ctx, v->shader_program = shader_program; v->options = options; v->glsl_version = ctx->Const.GLSLVersion; - v->native_integers = ctx->Const.NativeIntegers; + v->native_integers = + screen->get_shader_param(screen, + gl_shader_to_pipe_shader(shader->Type), + PIPE_SHADER_CAP_INTEGERS); _mesa_generate_parameters_list_for_uniforms(shader_program, shader, prog->Parameters); @@ -4951,6 +4971,7 @@ st_new_shader_program(struct gl_context *ctx, GLuint name) GLboolean st_link_shader(struct gl_context *ctx, struct gl_shader_program *prog) { + struct pipe_screen *screen = st_context(ctx)->pipe->screen; assert(prog->LinkStatus); for (unsigned i = 0; i < MESA_SHADER_TYPES; i++) { @@ -4967,7 +4988,10 @@ st_link_shader(struct gl_context *ctx, struct gl_shader_program *prog) EXP_TO_EXP2 | LOG_TO_LOG2; if (options->EmitNoPow) what_to_lower |= POW_TO_EXP2; - if (!ctx->Const.NativeIntegers) + + if (!screen->get_shader_param(screen, + gl_shader_to_pipe_shader(prog->_LinkedShaders[i]->Type), + PIPE_SHADER_CAP_INTEGERS)) what_to_lower |= INT_DIV_TO_MUL_RCP; progress = false; -- 1.7.4.1 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev