mesa: fix issues around multisample enable
authorRoland Scheidegger <sroland@tungstengraphics.com>
Wed, 2 Jul 2008 18:20:33 +0000 (20:20 +0200)
committerRoland Scheidegger <sroland@tungstengraphics.com>
Wed, 2 Jul 2008 18:21:06 +0000 (20:21 +0200)
multisample enable is enabled by default, however gl mandates multisample
rendering rules only apply if there's also a multisampled buffer.

src/mesa/drivers/dri/r300/r300_render.c
src/mesa/main/buffers.c
src/mesa/main/mtypes.h
src/mesa/main/state.c
src/mesa/swrast/s_points.c

index 8f74f9d785e0ad5720021eb817a441d071122dd5..69ff6d573e2f3b92d7e6d7cb6df54efc6c251b6f 100644 (file)
@@ -373,7 +373,7 @@ static int r300Fallback(GLcontext * ctx)
 
        if (!r300->disable_lowimpact_fallback) {
                FALLBACK_IF(ctx->Polygon.StippleFlag);
-               FALLBACK_IF(ctx->Multisample.Enabled);
+               FALLBACK_IF(ctx->Multisample._Enabled);
                FALLBACK_IF(ctx->Line.StippleFlag);
                FALLBACK_IF(ctx->Line.SmoothFlag);
                FALLBACK_IF(ctx->Point.SmoothFlag);
index b08095465d86f9c1939f5e65cc4575527ae6cd26..5ab969e0ebb249617e1f364f2344417a219e1c82 100644 (file)
@@ -829,7 +829,7 @@ _mesa_init_scissor(GLcontext *ctx)
 void
 _mesa_init_multisample(GLcontext *ctx)
 {
-   ctx->Multisample.Enabled = GL_FALSE;
+   ctx->Multisample.Enabled = GL_TRUE;
    ctx->Multisample.SampleAlphaToCoverage = GL_FALSE;
    ctx->Multisample.SampleAlphaToOne = GL_FALSE;
    ctx->Multisample.SampleCoverage = GL_FALSE;
index 04da767ec91d9cb086add059b01a15141524e367..9339146e25cba9d4103dd108a4c6cf671ea82874 100644 (file)
@@ -958,6 +958,7 @@ struct gl_list_extensions
 struct gl_multisample_attrib
 {
    GLboolean Enabled;
+   GLboolean _Enabled;   /**< true if Enabled and multisample buffer */
    GLboolean SampleAlphaToCoverage;
    GLboolean SampleAlphaToOne;
    GLboolean SampleCoverage;
index 1c73c5c462bdaf7dc3b7ee264dd87aba7f9477af..7192bed4a3d3401f4c725e2ffd8b781e71e4c17d 100644 (file)
@@ -1060,6 +1060,20 @@ update_viewport_matrix(GLcontext *ctx)
 }
 
 
+/**
+ * Update derived multisample state.
+ */
+static void
+update_multisample(GLcontext *ctx)
+{
+   ctx->Multisample._Enabled = GL_FALSE;
+   if (ctx->DrawBuffer) {
+      if (ctx->DrawBuffer->Visual.sampleBuffers)
+         ctx->Multisample._Enabled = GL_TRUE;
+   }
+}
+
+
 /**
  * Update derived color/blend/logicop state.
  */
@@ -1223,6 +1237,9 @@ _mesa_update_state_locked( GLcontext *ctx )
    if (new_state & (_NEW_BUFFERS | _NEW_VIEWPORT))
       update_viewport_matrix(ctx);
 
+   if (new_state & _NEW_MULTISAMPLE)
+      update_multisample( ctx );
+
    if (new_state & _NEW_COLOR)
       update_color( ctx );
 
index 350a0682d693ebadb12d7f90969a1e78d9287058..1a8fd7d6db2f77dcfd273ffaa71ea40184310967 100644 (file)
@@ -263,7 +263,7 @@ smooth_point(GLcontext *ctx, const SWvertex *vert)
    size = get_size(ctx, vert, GL_TRUE);
 
    /* alpha attenuation / fade factor */
-   if (ctx->Multisample.Enabled) {
+   if (ctx->Multisample._Enabled) {
       if (vert->pointSize >= ctx->Point.Threshold) {
          alphaAtten = 1.0F;
       }