r300g: fix texturing with non-3D textures and wrap R mode set to sample border
authorMarek Olšák <maraeo@gmail.com>
Thu, 9 Jun 2011 02:09:40 +0000 (04:09 +0200)
committerMarek Olšák <maraeo@gmail.com>
Thu, 9 Jun 2011 02:19:03 +0000 (04:19 +0200)
If the wrap R (3rd) mode is set to CLAMP or CLAMP_TO_BORDER and the texture
isn't 3D, r300 always samples the border color regardless of texture
coordinates.

I HATE THIS HARDWARE.

NOTE: This is a candidate for the 7.10 branch.

src/gallium/drivers/r300/r300_state_derived.c

index 121409b22604887fb8244f1f75d368e08ef8175b..f63114e7eb74a67cbd3227717aa5f6c2e34f603c 100644 (file)
@@ -854,6 +854,12 @@ static void r300_merge_textures_and_samplers(struct r300_context* r300)
                 texstate->filter0 |= R300_TX_WRAP_T(R300_TX_CLAMP_TO_EDGE);
             }
 
+            /* The hardware doesn't like CLAMP and CLAMP_TO_BORDER
+             * for the 3rd coordinate if the texture isn't 3D. */
+            if (tex->b.b.b.target != PIPE_TEXTURE_3D) {
+                texstate->filter0 &= ~R300_TX_WRAP_R_MASK;
+            }
+
             if (tex->tex.is_npot) {
                 /* NPOT textures don't support mip filter, unfortunately.
                  * This prevents incorrect rendering. */