gallium: remove PIPE_SHADER_CAP_OUTPUT_READ
authorMarek Olšák <maraeo@gmail.com>
Thu, 23 Feb 2012 22:44:36 +0000 (23:44 +0100)
committerMarek Olšák <maraeo@gmail.com>
Mon, 27 Feb 2012 01:03:23 +0000 (02:03 +0100)
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.

src/gallium/drivers/i915/i915_screen.c
src/gallium/drivers/nv50/nv50_screen.c
src/gallium/drivers/nvc0/nvc0_screen.c
src/gallium/drivers/r300/r300_screen.c
src/gallium/drivers/r600/r600_pipe.c
src/gallium/drivers/svga/svga_screen.c
src/gallium/include/pipe/p_defines.h
src/mesa/state_tracker/st_glsl_to_tgsi.cpp

index 61340f3a5889c762de078d70dcd06ebba4d49485..9703210e933bc960d1400b44547b3f78419b09df 100644 (file)
@@ -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;
index 1d5359327bc85247628999c5ba4eac386e87070f..27566e241083df5d55390f45b69ce19a42608127 100644 (file)
@@ -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;
index abc04ab7b8b6534618023c11229a85e7be41b8e0..f7637eedc43dbab7bea78d152d61573229e8191d 100644 (file)
@@ -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;
index 9ac5781e949880b7deb555c5808108bd65073495..1a8e789fdc3c580e43b6566e0e315b8d6224b7b0 100644 (file)
@@ -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;
index 53f9bd6554f277b0103798afb58e65cce0d56816..7c828041f83437151919a5823eb616cf27cf3f06 100644 (file)
@@ -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;
 }
index a4de4932652279eae9b252d85ae58791928f7c70..fe6e6a030b0e48db5ffcb73ea30b159de2931edc 100644 (file)
@@ -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;
       }
index 4155178dda4cf377bf6d945982d4859bc011166b..096749bd37d15ccef765291bf60217245cac4cfd 100644 (file)
@@ -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
 };
 
 
index f139e95fe3909fb10ae81a252673fb06d18a27e3..b0227855c6738d8c37b75db0ae4605d752611540 100644 (file)
@@ -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);