Module: Mesa
Branch: master
Commit: 51e8a66fa197de7e17fb94d901a4cf26f0812670
URL:    
http://cgit.freedesktop.org/mesa/mesa/commit/?id=51e8a66fa197de7e17fb94d901a4cf26f0812670

Author: Francisco Jerez <curroje...@riseup.net>
Date:   Thu Feb 25 01:55:13 2010 +0100

dri/nouveau: Use the XRGB8888 hardware texture format.

---

 src/mesa/drivers/dri/nouveau/nouveau_texture.c |   45 +++++++++++++-----------
 src/mesa/drivers/dri/nouveau/nv04_state_tex.c  |    2 +
 src/mesa/drivers/dri/nouveau/nv10_state_frag.c |    7 ++++
 src/mesa/drivers/dri/nouveau/nv10_state_tex.c  |    4 ++
 src/mesa/drivers/dri/nouveau/nv20_state_tex.c  |   18 ++++++---
 5 files changed, 49 insertions(+), 27 deletions(-)

diff --git a/src/mesa/drivers/dri/nouveau/nouveau_texture.c 
b/src/mesa/drivers/dri/nouveau/nouveau_texture.c
index 0947a2a..bf365bf 100644
--- a/src/mesa/drivers/dri/nouveau/nouveau_texture.c
+++ b/src/mesa/drivers/dri/nouveau/nouveau_texture.c
@@ -108,40 +108,28 @@ nouveau_choose_tex_format(GLcontext *ctx, GLint 
internalFormat,
        switch (internalFormat) {
        case 4:
        case GL_RGBA:
-       case GL_RGB10_A2:
+       case GL_RGBA2:
+       case GL_RGBA4:
+       case GL_RGBA8:
        case GL_RGBA12:
        case GL_RGBA16:
-       case GL_RGBA8:
+       case GL_RGB10_A2:
+               return MESA_FORMAT_ARGB8888;
+       case GL_RGB5_A1:
+               return MESA_FORMAT_ARGB1555;
+
        case GL_RGB:
        case GL_RGB8:
        case GL_RGB10:
        case GL_RGB12:
        case GL_RGB16:
-               return MESA_FORMAT_ARGB8888;
-       case GL_RGB5_A1:
-               return MESA_FORMAT_ARGB1555;
-
+               return MESA_FORMAT_XRGB8888;
        case 3:
        case GL_R3_G3_B2:
        case GL_RGB4:
        case GL_RGB5:
                return MESA_FORMAT_RGB565;
 
-       case GL_ALPHA:
-       case GL_ALPHA4:
-       case GL_ALPHA12:
-       case GL_ALPHA16:
-       case GL_ALPHA8:
-               return MESA_FORMAT_A8;
-
-       case 1:
-       case GL_LUMINANCE:
-       case GL_LUMINANCE4:
-       case GL_LUMINANCE12:
-       case GL_LUMINANCE16:
-       case GL_LUMINANCE8:
-               return MESA_FORMAT_L8;
-
        case 2:
        case GL_LUMINANCE_ALPHA:
        case GL_LUMINANCE4_ALPHA4:
@@ -152,6 +140,21 @@ nouveau_choose_tex_format(GLcontext *ctx, GLint 
internalFormat,
        case GL_LUMINANCE8_ALPHA8:
                return MESA_FORMAT_ARGB8888;
 
+       case 1:
+       case GL_LUMINANCE:
+       case GL_LUMINANCE4:
+       case GL_LUMINANCE12:
+       case GL_LUMINANCE16:
+       case GL_LUMINANCE8:
+               return MESA_FORMAT_L8;
+
+       case GL_ALPHA:
+       case GL_ALPHA4:
+       case GL_ALPHA12:
+       case GL_ALPHA16:
+       case GL_ALPHA8:
+               return MESA_FORMAT_A8;
+
        case GL_INTENSITY:
        case GL_INTENSITY4:
        case GL_INTENSITY12:
diff --git a/src/mesa/drivers/dri/nouveau/nv04_state_tex.c 
b/src/mesa/drivers/dri/nouveau/nv04_state_tex.c
index facd41c..6d8762b 100644
--- a/src/mesa/drivers/dri/nouveau/nv04_state_tex.c
+++ b/src/mesa/drivers/dri/nouveau/nv04_state_tex.c
@@ -48,6 +48,8 @@ get_tex_format(struct gl_texture_image *ti)
                return NV04_TEXTURED_TRIANGLE_FORMAT_COLOR_R5G6B5;
        case MESA_FORMAT_ARGB8888:
                return NV04_TEXTURED_TRIANGLE_FORMAT_COLOR_A8R8G8B8;
+       case MESA_FORMAT_XRGB8888:
+               return NV04_TEXTURED_TRIANGLE_FORMAT_COLOR_X8R8G8B8;
        default:
                assert(0);
        }
diff --git a/src/mesa/drivers/dri/nouveau/nv10_state_frag.c 
b/src/mesa/drivers/dri/nouveau/nv10_state_frag.c
index b56b4ff..76b95fd 100644
--- a/src/mesa/drivers/dri/nouveau/nv10_state_frag.c
+++ b/src/mesa/drivers/dri/nouveau/nv10_state_frag.c
@@ -179,6 +179,13 @@ get_input_arg(struct combiner_state *rc, int arg, int 
flags)
                                return RC_IN_SOURCE(ZERO) |
                                        get_input_mapping(rc, operand,
                                                          flags ^ INVERT);
+
+               } else if (format == MESA_FORMAT_XRGB8888) {
+                       /* Sometimes emulated using ARGB8888. */
+                       if (!is_color_operand(operand))
+                               return RC_IN_SOURCE(ZERO) |
+                                       get_input_mapping(rc, operand,
+                                                         flags ^ INVERT);
                }
        }
 
diff --git a/src/mesa/drivers/dri/nouveau/nv10_state_tex.c 
b/src/mesa/drivers/dri/nouveau/nv10_state_tex.c
index 7fe2731..02a5ca7 100644
--- a/src/mesa/drivers/dri/nouveau/nv10_state_tex.c
+++ b/src/mesa/drivers/dri/nouveau/nv10_state_tex.c
@@ -44,6 +44,9 @@ get_tex_format_pot(struct gl_texture_image *ti)
        case MESA_FORMAT_ARGB8888:
                return NV10TCL_TX_FORMAT_FORMAT_A8R8G8B8;
 
+       case MESA_FORMAT_XRGB8888:
+               return NV10TCL_TX_FORMAT_FORMAT_X8R8G8B8;
+
        case MESA_FORMAT_ARGB1555:
                return NV10TCL_TX_FORMAT_FORMAT_A1R5G5B5;
 
@@ -79,6 +82,7 @@ get_tex_format_rect(struct gl_texture_image *ti)
                return NV10TCL_TX_FORMAT_FORMAT_R5G6B5_RECT;
 
        case MESA_FORMAT_ARGB8888:
+       case MESA_FORMAT_XRGB8888:
                return NV10TCL_TX_FORMAT_FORMAT_A8R8G8B8_RECT;
 
        case MESA_FORMAT_A8:
diff --git a/src/mesa/drivers/dri/nouveau/nv20_state_tex.c 
b/src/mesa/drivers/dri/nouveau/nv20_state_tex.c
index 7a5914d..9287010 100644
--- a/src/mesa/drivers/dri/nouveau/nv20_state_tex.c
+++ b/src/mesa/drivers/dri/nouveau/nv20_state_tex.c
@@ -45,6 +45,9 @@ get_tex_format_pot(struct gl_texture_image *ti)
        case MESA_FORMAT_ARGB4444:
                return NV20TCL_TX_FORMAT_FORMAT_A4R4G4B4;
 
+       case MESA_FORMAT_XRGB8888:
+               return NV20TCL_TX_FORMAT_FORMAT_X8R8G8B8;
+
        case MESA_FORMAT_RGB565:
                return NV20TCL_TX_FORMAT_FORMAT_R5G6B5;
 
@@ -67,15 +70,21 @@ static uint32_t
 get_tex_format_rect(struct gl_texture_image *ti)
 {
        switch (ti->TexFormat) {
+       case MESA_FORMAT_ARGB8888:
+               return NV20TCL_TX_FORMAT_FORMAT_A8R8G8B8_RECT;
+
        case MESA_FORMAT_ARGB1555:
                return NV20TCL_TX_FORMAT_FORMAT_A1R5G5B5_RECT;
 
+       case MESA_FORMAT_ARGB4444:
+               return NV20TCL_TX_FORMAT_FORMAT_A4R4G4B4_RECT;
+
+       case MESA_FORMAT_XRGB8888:
+               return NV20TCL_TX_FORMAT_FORMAT_R8G8B8_RECT;
+
        case MESA_FORMAT_RGB565:
                return NV20TCL_TX_FORMAT_FORMAT_R5G6B5_RECT;
 
-       case MESA_FORMAT_ARGB8888:
-               return NV20TCL_TX_FORMAT_FORMAT_A8R8G8B8_RECT;
-
        case MESA_FORMAT_L8:
                return NV20TCL_TX_FORMAT_FORMAT_L8_RECT;
 
@@ -83,9 +92,6 @@ get_tex_format_rect(struct gl_texture_image *ti)
        case MESA_FORMAT_I8:
                return NV20TCL_TX_FORMAT_FORMAT_A8_RECT;
 
-       case MESA_FORMAT_ARGB4444:
-               return NV20TCL_TX_FORMAT_FORMAT_A4R4G4B4_RECT;
-
        default:
                assert(0);
        }

_______________________________________________
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-commit

Reply via email to