<div dir="ltr">On 31 October 2013 18:36, Chad Versace <span dir="ltr"><<a href="mailto:chad.versace@linux.intel.com" target="_blank">chad.versace@linux.intel.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">Clamp gen7 GL_MAX_SAMPLES to 0, 4, or 8.<br>
Clamp gen6 GL_MAX_SAMPLES to 0 or 4.<br>
Clamp other gens to 0.<br>
<br>
CC: Eric Anholt <<a href="mailto:eric@anholt.org" target="_blank">eric@anholt.org</a>><br>
Signed-off-by: Chad Versace <<a href="mailto:chad.versace@linux.intel.com" target="_blank">chad.versace@linux.intel.com</a>><br>
---<br>
 src/mesa/drivers/dri/i965/brw_context.c  | 35 +++++++++++++++++++++++---------<br>
 src/mesa/drivers/dri/i965/intel_screen.c |  1 +<br>
 2 files changed, 26 insertions(+), 10 deletions(-)<br>
<br>
diff --git a/src/mesa/drivers/dri/i965/brw_context.c b/src/mesa/drivers/dri/i965/brw_context.c<br>
index 38147e9..60a201f 100644<br>
--- a/src/mesa/drivers/dri/i965/brw_context.c<br>
+++ b/src/mesa/drivers/dri/i965/brw_context.c<br>
@@ -273,6 +273,10 @@ brw_initialize_context_constants(struct brw_context *brw)<br>
 {<br>
    struct gl_context *ctx = &brw->ctx;<br>
<br>
+   uint32_t max_samples;<br>
+   const uint32_t *legal_max_samples;<br>
+   uint32_t clamp_max_samples;<br>
+<br>
    ctx->Const.QueryCounterBits.Timestamp = 36;<br>
<br>
    ctx->Const.StripTextureBorder = true;<br>
@@ -333,19 +337,30 @@ brw_initialize_context_constants(struct brw_context *brw)<br>
<br>
    ctx->Const.AlwaysUseGetTransformFeedbackVertexCount = true;<br>
<br>
-   if (brw->gen == 6) {<br>
-      ctx->Const.MaxSamples = 4;<br>
-      ctx->Const.MaxColorTextureSamples = 4;<br>
-      ctx->Const.MaxDepthTextureSamples = 4;<br>
-      ctx->Const.MaxIntegerSamples = 4;<br>
-   } else if (brw->gen >= 7) {<br>
-      ctx->Const.MaxSamples = 8;<br>
-      ctx->Const.MaxColorTextureSamples = 8;<br>
-      ctx->Const.MaxDepthTextureSamples = 8;<br>
-      ctx->Const.MaxIntegerSamples = 8;<br>
+   if (brw->gen >= 7) {<br>
+      legal_max_samples = (uint32_t[]){8, 4, 0};<br>
       ctx->Const.MaxProgramTextureGatherComponents = 4;<br>
+   } else if (brw->gen == 6) {<br>
+      legal_max_samples = (uint32_t[]){4, 0};<br>
+   } else {<br>
+      legal_max_samples = (uint32_t[]){0};<br>
+   }<br>
+<br>
+   /* Set max_samples = min(max(legal_max_samples), clamp_max_samples). */<br></blockquote><div><br></div><div>I don't think the comment matches your intention.  How about this instead?<br><br>   /* Set max_samples to the first (and hence largest) element of<br>

    * legal_max_samples that is <= clamp_max_samples.  Or, if<br>    * clamp_max_samples < 0, simply the first element of legal_max_samples.<br>    */<br><br></div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">


+   max_samples = 0;<br>
+   clamp_max_samples = driQueryOptioni(&brw->optionCache, "clamp_max_samples");<br>
+   for (uint32_t i = 0; legal_max_samples[i] != 0; ++i) {<br>
+      if (legal_max_samples[i] <= clamp_max_samples) {<br>
+         max_samples = legal_max_samples[i];<br>
+         break;<br>
+      }<br></blockquote><div><br></div><div>If clamp_max_samples < 0, this code sets max_samples to 0.  That's not what you want; you want it to be set to legal_max_samples[0] in this case.<br></div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">


    }<br>
<br>
+   ctx->Const.MaxSamples = max_samples;<br>
+   ctx->Const.MaxColorTextureSamples = max_samples;<br>
+   ctx->Const.MaxDepthTextureSamples = max_samples;<br>
+   ctx->Const.MaxIntegerSamples = max_samples;<br>
+<br>
    ctx->Const.MinLineWidth = 1.0;<br>
    ctx->Const.MinLineWidthAA = 1.0;<br>
    ctx->Const.MaxLineWidth = 5.0;<br>
diff --git a/src/mesa/drivers/dri/i965/intel_screen.c b/src/mesa/drivers/dri/i965/intel_screen.c<br>
index eafafa2..0e991ec 100644<br>
--- a/src/mesa/drivers/dri/i965/intel_screen.c<br>
+++ b/src/mesa/drivers/dri/i965/intel_screen.c<br>
@@ -67,6 +67,7 @@ DRI_CONF_BEGIN<br>
    DRI_CONF_SECTION_END<br>
    DRI_CONF_SECTION_QUALITY<br>
       DRI_CONF_FORCE_S3TC_ENABLE("false")<br>
+      DRI_CONF_CLAMP_MAX_SAMPLES()<br>
    DRI_CONF_SECTION_END<br>
    DRI_CONF_SECTION_DEBUG<br>
       DRI_CONF_NO_RAST("false")<br>
<span><font color="#888888">--<br>
1.8.3.1<br>
<br>
_______________________________________________<br>
mesa-dev mailing list<br>
<a href="mailto:mesa-dev@lists.freedesktop.org" target="_blank">mesa-dev@lists.freedesktop.org</a><br>
<a href="http://lists.freedesktop.org/mailman/listinfo/mesa-dev" target="_blank">http://lists.freedesktop.org/mailman/listinfo/mesa-dev</a><br>
</font></span></blockquote></div><br></div></div>