i965: Add an option to ignore sample qualifier
authorAnuj Phogat <anuj.phogat@gmail.com>
Mon, 13 Jan 2014 20:26:55 +0000 (12:26 -0800)
committerAnuj Phogat <anuj.phogat@gmail.com>
Tue, 21 Jan 2014 22:42:27 +0000 (14:42 -0800)
This will be useful in my next patch which depends on a functionality
of _mesa_get_min_invocations_per_fragment() to ignore the sample
qualifier (prog->IsSample) based on a flag passed to it.

Cc: mesa-stable@lists.freedesktop.org
Signed-off-by: Anuj Phogat <anuj.phogat@gmail.com>
Reviewed-by: Chris Forbes <chrisf@ijw.co.nz>
src/mesa/drivers/dri/i965/brw_wm.c
src/mesa/drivers/dri/i965/gen6_wm_state.c
src/mesa/drivers/dri/i965/gen7_wm_state.c
src/mesa/program/program.c
src/mesa/program/program.h

index 8459013cfe6590f74318f1df4e2baedac72a4950..0a308862c4785cf1673f92c7315bfd7318a1f3b4 100644 (file)
@@ -504,7 +504,7 @@ static void brw_wm_populate_key( struct brw_context *brw,
 
    /* _NEW_BUFFERS _NEW_MULTISAMPLE */
    key->compute_pos_offset =
-      _mesa_get_min_invocations_per_fragment(ctx, &fp->program) > 1 &&
+      _mesa_get_min_invocations_per_fragment(ctx, &fp->program, false) > 1 &&
       fp->program.Base.SystemValuesRead & SYSTEM_BIT_SAMPLE_POS;
 
    key->compute_sample_id =
index 83a170836084f1d8cb20d5bf70499f6a3a088b9f..0bb5ef3e75193d0cac2483ce4919b3e36c605e3d 100644 (file)
@@ -161,7 +161,7 @@ upload_wm_state(struct brw_context *brw)
     * better performance than 'SIMD8 only' dispatch.
     */
    int min_inv_per_frag =
-      _mesa_get_min_invocations_per_fragment(ctx, brw->fragment_program);
+      _mesa_get_min_invocations_per_fragment(ctx, brw->fragment_program, false);
    assert(min_inv_per_frag >= 1);
 
    if (brw->wm.prog_data->prog_offset_16) {
index b6561bbaf2b425b6c0347f29cb9a4aa38a5e039c..8dcefc2e04cab79689fe58e269578d0bb7a4a9cf 100644 (file)
@@ -103,7 +103,7 @@ upload_wm_state(struct brw_context *brw)
       else
          dw1 |= GEN7_WM_MSRAST_OFF_PIXEL;
 
-      if (_mesa_get_min_invocations_per_fragment(ctx, brw->fragment_program) > 1)
+      if (_mesa_get_min_invocations_per_fragment(ctx, brw->fragment_program, false) > 1)
          dw2 |= GEN7_WM_MSDISPMODE_PERSAMPLE;
       else
          dw2 |= GEN7_WM_MSDISPMODE_PERPIXEL;
@@ -236,7 +236,7 @@ upload_ps_state(struct brw_context *brw)
     * better performance than 'SIMD8 only' dispatch.
     */
    int min_inv_per_frag =
-      _mesa_get_min_invocations_per_fragment(ctx, brw->fragment_program);
+      _mesa_get_min_invocations_per_fragment(ctx, brw->fragment_program, false);
    assert(min_inv_per_frag >= 1);
 
    if (brw->wm.prog_data->prog_offset_16) {
index 3c19e8c60f08457668a23548f2398652d0747b8b..ea8eb0d3a7afcdf450472016f4130c821b5f1d5c 100644 (file)
@@ -1023,7 +1023,8 @@ _mesa_postprocess_program(struct gl_context *ctx, struct gl_program *prog)
  */
 GLint
 _mesa_get_min_invocations_per_fragment(struct gl_context *ctx,
-                                       const struct gl_fragment_program *prog)
+                                       const struct gl_fragment_program *prog,
+                                       bool ignore_sample_qualifier)
 {
    /* From ARB_sample_shading specification:
     * "Using gl_SampleID in a fragment shader causes the entire shader
@@ -1041,7 +1042,7 @@ _mesa_get_min_invocations_per_fragment(struct gl_context *ctx,
        * "Use of the "sample" qualifier on a fragment shader input
        *  forces per-sample shading"
        */
-      if (prog->IsSample)
+      if (prog->IsSample && !ignore_sample_qualifier)
          return MAX2(ctx->DrawBuffer->Visual.samples, 1);
 
       if (prog->Base.SystemValuesRead & (SYSTEM_BIT_SAMPLE_ID |
index 0e350cd6f86dc107709bca14e92601f85707c019..c47ac1cc7969e1b24cd31a61d9f6a30c3dd8dbc1 100644 (file)
@@ -189,7 +189,8 @@ _mesa_postprocess_program(struct gl_context *ctx, struct gl_program *prog);
 
 extern GLint
 _mesa_get_min_invocations_per_fragment(struct gl_context *ctx,
-                                       const struct gl_fragment_program *prog);
+                                       const struct gl_fragment_program *prog,
+                                       bool ignore_sample_qualifier);
 
 static inline GLuint
 _mesa_program_enum_to_shader_stage(GLenum v)