dri/nouveau: Use the XRGB8888 hardware texture format.

This commit is contained in:
Francisco Jerez 2010-02-25 01:55:13 +01:00
parent 59ddf8ca63
commit 51e8a66fa1
5 changed files with 49 additions and 27 deletions

View File

@ -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:

View File

@ -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);
}

View File

@ -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);
}
}

View File

@ -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:

View File

@ -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);
}