<div dir="ltr">On 20 October 2013 07:25, Paul Berry <span dir="ltr"><<a href="mailto:stereotype441@gmail.com" target="_blank">stereotype441@gmail.com</a>></span> wrote:<br><div class="gmail_extra"><div class="gmail_quote">
<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div><div class="h5">On 14 October 2013 10:12, Anuj Phogat <span dir="ltr"><<a href="mailto:anuj.phogat@gmail.com" target="_blank">anuj.phogat@gmail.com</a>></span> wrote:<br>
</div></div><div class="gmail_extra"><div class="gmail_quote"><div><div class="h5">
<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">- Enable GEN6_WM_MSDISPMODE_PERSAMPLE, GEN6_WM_POSOFFSET_SAMPLE,<br>
  GEN6_WM_OMASK_TO_RENDER_TARGET as per extension's specification.<br>
- Don't enable GEN6_WM_16_DISPATCH_ENABLE when GEN6_WM_MSDISPMODE_PERSAMPLE<br>
  is enabled. Refer SNB PRM Vol. 2, Part 1, Page 279 for details.<br>
<br>
Signed-off-by: Anuj Phogat <<a href="mailto:anuj.phogat@gmail.com" target="_blank">anuj.phogat@gmail.com</a>><br>
---<br>
 src/mesa/drivers/dri/i965/gen6_wm_state.c | 67 +++++++++++++++++++++++++++++--<br>
 1 file changed, 64 insertions(+), 3 deletions(-)<br>
<br>
diff --git a/src/mesa/drivers/dri/i965/gen6_wm_state.c b/src/mesa/drivers/dri/i965/gen6_wm_state.c<br>
index c96a107..4bc25d6 100644<br>
--- a/src/mesa/drivers/dri/i965/gen6_wm_state.c<br>
+++ b/src/mesa/drivers/dri/i965/gen6_wm_state.c<br>
@@ -103,6 +103,7 @@ upload_wm_state(struct brw_context *brw)<br>
<br>
    /* _NEW_BUFFERS */<br>
    bool multisampled_fbo = ctx->DrawBuffer->Visual.samples > 1;<br>
+   bool msdispmode_persample = false;<br>
<br>
     /* CACHE_NEW_WM_PROG */<br>
    if (brw->wm.prog_data->nr_params == 0) {<br>
@@ -156,7 +157,17 @@ upload_wm_state(struct brw_context *brw)<br>
<br>
    /* CACHE_NEW_WM_PROG */<br>
    dw5 |= GEN6_WM_8_DISPATCH_ENABLE;<br>
-   if (brw->wm.prog_data->prog_offset_16)<br>
+   msdispmode_persample =<br>
+      ctx->Multisample.Enabled &&<br>
+      (ctx->Multisample.SampleShading ||<br>
+       brw->fragment_program->Base.InputsRead & VARYING_BIT_SAMPLE_ID ||<br>
+       brw->fragment_program->Base.InputsRead & VARYING_BIT_SAMPLE_POS);<br></blockquote><div><br></div></div></div><div>The dependency on ctx->Multisample.SampleShading isn't quite right.  You also need to account for the value of ctx->Multisample.MinSampleShadingValue.  I believe the correct expression is something like:<br>

<br></div><div>(ctx->Multisample.SampleShading && ceil(ctx->Multisample.MinSampleShadingValue * ctx->DrawBuffer->Visual.samples) > 1)<br></div><div><br></div><div>This is necessary to ensure that if, for example, the buffer is 4xMSAA and the client sets MinSampleShadingARB to 0.25 or less, we still get per-fragment shading.<br>
</div></div></div></div></blockquote><div><br></div><div>My suggestion on patch 7 about _mesa_get_min_invocations_per_fragment(...) should also be sufficient to take care of this.<br></div></div></div></div>