diff options
author | marha <marha@users.sourceforge.net> | 2011-11-25 08:32:21 +0100 |
---|---|---|
committer | marha <marha@users.sourceforge.net> | 2011-11-25 08:32:21 +0100 |
commit | 849d328b25c2f3c87d539e1fe7af38e7580a0409 (patch) | |
tree | 349c425a87ddb3aaa1d7832d5a8e68252fc73ddb /mesalib/src/mesa/state_tracker/st_glsl_to_tgsi.cpp | |
parent | a8a12d4c8be177f63cae7dc96c2b52f09e228a76 (diff) | |
parent | a0b4a1330be6a36ad095222d2ea83927cd33514d (diff) | |
download | vcxsrv-849d328b25c2f3c87d539e1fe7af38e7580a0409.tar.gz vcxsrv-849d328b25c2f3c87d539e1fe7af38e7580a0409.tar.bz2 vcxsrv-849d328b25c2f3c87d539e1fe7af38e7580a0409.zip |
Merge remote-tracking branch 'origin/released'
Conflicts:
xorg-server/glx/glxdriswrast.c
xorg-server/glx/single2.c
xorg-server/hw/xwin/winconfig.c
xorg-server/os/osinit.c
xorg-server/os/xdmcp.c
xorg-server/xkb/xkbInit.c
Diffstat (limited to 'mesalib/src/mesa/state_tracker/st_glsl_to_tgsi.cpp')
-rw-r--r-- | mesalib/src/mesa/state_tracker/st_glsl_to_tgsi.cpp | 16 |
1 files changed, 12 insertions, 4 deletions
diff --git a/mesalib/src/mesa/state_tracker/st_glsl_to_tgsi.cpp b/mesalib/src/mesa/state_tracker/st_glsl_to_tgsi.cpp index 929c7af01..74b8fa7c7 100644 --- a/mesalib/src/mesa/state_tracker/st_glsl_to_tgsi.cpp +++ b/mesalib/src/mesa/state_tracker/st_glsl_to_tgsi.cpp @@ -4803,6 +4803,8 @@ 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; @@ -4813,14 +4815,17 @@ 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"); @@ -4889,10 +4894,13 @@ get_mesa_program(struct gl_context *ctx, } #endif - /* Remove reads to output registers, and to varyings in vertex shaders. */ - v->remove_output_reads(PROGRAM_OUTPUT); - if (target == GL_VERTEX_PROGRAM_ARB) - v->remove_output_reads(PROGRAM_VARYING); + 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. */ + v->remove_output_reads(PROGRAM_OUTPUT); + if (target == GL_VERTEX_PROGRAM_ARB) + v->remove_output_reads(PROGRAM_VARYING); + } /* Perform optimizations on the instructions in the glsl_to_tgsi_visitor. */ v->simplify_cmp(); |