[PATCH 1/3] wined3d: Fix post-pixelshader blending test.

Matteo Bruni mbruni at codeweavers.com
Wed Nov 9 15:16:36 CST 2011


---
 dlls/wined3d/utils.c |  123 ++++++++++++++++++++++++++-----------------------
 1 files changed, 65 insertions(+), 58 deletions(-)

diff --git a/dlls/wined3d/utils.c b/dlls/wined3d/utils.c
index 246c9bc..baf2548 100644
--- a/dlls/wined3d/utils.c
+++ b/dlls/wined3d/utils.c
@@ -1080,7 +1080,7 @@ static void check_fbo_compat(const struct wined3d_gl_info *gl_info, struct wined
         }
 
         glEnable(GL_BLEND);
-        glClearColor(0, 0, 0, 1);
+        glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
         glClear(GL_COLOR_BUFFER_BIT);
         if (glGetError() == GL_INVALID_FRAMEBUFFER_OPERATION)
         {
@@ -1088,65 +1088,72 @@ static void check_fbo_compat(const struct wined3d_gl_info *gl_info, struct wined
             TRACE("Format doesn't support post-pixelshader blending.\n");
             format->flags &= ~WINED3DFMT_FLAG_POSTPIXELSHADER_BLENDING;
         }
-
-        glViewport(0, 0, 16, 16);
-        glDisable(GL_LIGHTING);
-        glMatrixMode(GL_MODELVIEW);
-        glLoadIdentity();
-        glMatrixMode(GL_PROJECTION);
-        glLoadIdentity();
-
-        glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
-
-        /* Draw a full-black quad */
-        glBegin(GL_TRIANGLE_STRIP);
-        glColor4ub(0x00, 0x00, 0x00, 0xff);
-        glVertex3f(-1.0f, -1.0f, 0.0f);
-        glColor4ub(0x00, 0x00, 0x00, 0xff);
-        glVertex3f(1.0f, -1.0f, 0.0f);
-        glColor4ub(0x00, 0x00, 0x00, 0xff);
-        glVertex3f(-1.0f, 1.0f, 0.0f);
-        glColor4ub(0x00, 0x00, 0x00, 0xff);
-        glVertex3f(1.0f, 1.0f, 0.0f);
-        glEnd();
-
-        /* Draw a half-transparent red quad */
-        glBegin(GL_TRIANGLE_STRIP);
-        glColor4ub(0xff, 0x00, 0x00, 0x80);
-        glVertex3f(-1.0f, -1.0f, 0.0f);
-        glColor4ub(0xff, 0x00, 0x00, 0x80);
-        glVertex3f(1.0f, -1.0f, 0.0f);
-        glColor4ub(0xff, 0x00, 0x00, 0x80);
-        glVertex3f(-1.0f, 1.0f, 0.0f);
-        glColor4ub(0xff, 0x00, 0x00, 0x80);
-        glVertex3f(1.0f, 1.0f, 0.0f);
-        glEnd();
-
-        glGenTextures(1, &tex2);
-        glBindTexture(GL_TEXTURE_2D, tex2);
-
-        glCopyTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, 0, 0, 16, 16, 0);
-        glGetTexImage(GL_TEXTURE_2D, 0, GL_BGRA, GL_UNSIGNED_INT_8_8_8_8_REV, readback);
-        checkGLcall("Post-pixelshader blending check");
-
-        color = readback[7 * 16 + 7];
-        a = color >> 24;
-        r = (color & 0x00ff0000) >> 16;
-
-        if (format->red_mask && (r < 0x7b || r > 0x84))
-            match = FALSE;
-        /* If the alpha component is more than 1 bit */
-        else if ((format->alpha_mask & (format->alpha_mask - 1)) && (a < 0x9f || a > 0xdf))
-            match = FALSE;
-        if (!match)
+        else
         {
-            TRACE("Format doesn't support post-pixelshader blending.\n");
-            TRACE("Color output: %#x\n", color);
-            format->flags &= ~WINED3DFMT_FLAG_POSTPIXELSHADER_BLENDING;
-        }
+            glViewport(0, 0, 16, 16);
+            glDisable(GL_LIGHTING);
+            glMatrixMode(GL_MODELVIEW);
+            glLoadIdentity();
+            glMatrixMode(GL_PROJECTION);
+            glLoadIdentity();
+
+            glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
+
+            /* Draw a full-black quad */
+            glBegin(GL_TRIANGLE_STRIP);
+            glColor4ub(0x00, 0x00, 0x00, 0xff);
+            glVertex3f(-1.0f, -1.0f, 0.0f);
+            glColor4ub(0x00, 0x00, 0x00, 0xff);
+            glVertex3f(1.0f, -1.0f, 0.0f);
+            glColor4ub(0x00, 0x00, 0x00, 0xff);
+            glVertex3f(-1.0f, 1.0f, 0.0f);
+            glColor4ub(0x00, 0x00, 0x00, 0xff);
+            glVertex3f(1.0f, 1.0f, 0.0f);
+            glEnd();
+
+            /* Draw a half-transparent red quad */
+            glBegin(GL_TRIANGLE_STRIP);
+            glColor4ub(0xff, 0x00, 0x00, 0x80);
+            glVertex3f(-1.0f, -1.0f, 0.0f);
+            glColor4ub(0xff, 0x00, 0x00, 0x80);
+            glVertex3f(1.0f, -1.0f, 0.0f);
+            glColor4ub(0xff, 0x00, 0x00, 0x80);
+            glVertex3f(-1.0f, 1.0f, 0.0f);
+            glColor4ub(0xff, 0x00, 0x00, 0x80);
+            glVertex3f(1.0f, 1.0f, 0.0f);
+            glEnd();
+
+            glGenTextures(1, &tex2);
+            glBindTexture(GL_TEXTURE_2D, tex2);
+
+            glCopyTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, 0, 0, 16, 16, 0);
+            glGetTexImage(GL_TEXTURE_2D, 0, GL_BGRA, GL_UNSIGNED_INT_8_8_8_8_REV, readback);
+            checkGLcall("Post-pixelshader blending check");
+
+            color = readback[7 * 16 + 7];
+            a = color >> 24;
+            r = (color & 0x00ff0000) >> 16;
+
+            if (format->red_mask && (r < 0x7b || r > 0x84))
+            match = FALSE;
+            /* If the alpha component is more than 1 bit */
+            else if ((format->alpha_mask & (format->alpha_mask - 1)) && (a < 0x9f || a > 0xdf))
+                match = FALSE;
+            if (!match)
+            {
+                TRACE("Format doesn't support post-pixelshader blending.\n");
+                TRACE("Color output: %#x\n", color);
+                format->flags &= ~WINED3DFMT_FLAG_POSTPIXELSHADER_BLENDING;
+            }
+            else
+            {
+                TRACE("Format supports post-pixelshader blending.\n");
+                format->flags |= WINED3DFMT_FLAG_POSTPIXELSHADER_BLENDING;
+            }
 
-        glBindTexture(GL_TEXTURE_2D, tex);
-        glDeleteTextures(1, &tex2);
+            glBindTexture(GL_TEXTURE_2D, tex);
+            glDeleteTextures(1, &tex2);
+        }
 
         if (gl_info->supported[ARB_FRAMEBUFFER_OBJECT]
                 || gl_info->supported[EXT_PACKED_DEPTH_STENCIL])
-- 
1.7.3.4




More information about the wine-patches mailing list