All pastes #1932118 Raw Edit

Anonymous

public text v1 · immutable
#1932118 ·published 2010-09-04 01:33 UTC
rendered paste body
diff --git a/src/mesa/drivers/dri/nouveau/nouveau_texture.c b/src/mesa/drivers/dri/nouveau/nouveau_texture.c
index 442f4e8..02eea8e 100644
--- a/src/mesa/drivers/dri/nouveau/nouveau_texture.c
+++ b/src/mesa/drivers/dri/nouveau/nouveau_texture.c
@@ -171,6 +171,19 @@ nouveau_choose_tex_format(GLcontext *ctx, GLint internalFormat,
 	case GL_COLOR_INDEX16_EXT:
 	case GL_COLOR_INDEX8_EXT:
 		return MESA_FORMAT_CI8;
+		
+	case GL_RGB_S3TC:
+	case GL_RGB4_S3TC:
+	case GL_COMPRESSED_RGB_S3TC_DXT1_EXT:
+		return MESA_FORMAT_RGB_DXT1;
+	case GL_COMPRESSED_RGBA_S3TC_DXT1_EXT:
+		return MESA_FORMAT_RGBA_DXT1;
+	case GL_RGBA_S3TC:
+	case GL_RGBA4_S3TC:
+	case GL_COMPRESSED_RGBA_S3TC_DXT3_EXT:
+		return MESA_FORMAT_RGBA_DXT3;
+	case GL_COMPRESSED_RGBA_S3TC_DXT5_EXT:
+		return MESA_FORMAT_RGBA_DXT5;
 
 	default:
 		assert(0);
@@ -501,15 +514,40 @@ static void
 nouveau_get_teximage(GLcontext *ctx, GLenum target, GLint level,
 		     GLenum format, GLenum type, GLvoid *pixels,
 		     struct gl_texture_object *t,
-		     struct gl_texture_image *ti)
+		     struct gl_texture_image *ti, int compressed)
 {
 	nouveau_teximage_map(ctx, ti);
+	 if (compressed) { 
+	 _mesa_get_compressed_teximage(ctx, target, level, pixels,
+					t, ti);
+	} else {
 	_mesa_get_teximage(ctx, target, level, format, type, pixels,
 			   t, ti);
+	}
 	nouveau_teximage_unmap(ctx, ti);
 }
 
 static void
+nouveau_GetTexImage(GLcontext * ctx, GLenum target, GLint level,
+          GLenum format, GLenum type, GLvoid * pixels,
+          struct gl_texture_object *texObj,
+          struct gl_texture_image *texImage)
+{
+    nouveau_get_teximage(ctx, target, level, format, type, pixels,
+                 texObj, texImage, 0);
+}
+
+static void 
+nouveau_GetCompressedTexImage(GLcontext *ctx, GLenum target, GLint level,
+                GLvoid *pixels,
+                struct gl_texture_object *texObj,
+                struct gl_texture_image *texImage)
+{
+    nouveau_get_teximage(ctx, target, level, 0, 0, pixels,
+                 texObj, texImage, 1);
+}
+
+static void
 nouveau_bind_texture(GLcontext *ctx, GLenum target,
 		     struct gl_texture_object *t)
 {
@@ -651,7 +689,9 @@ nouveau_texture_functions_init(struct dd_function_table *functions)
 	functions->TexSubImage1D = nouveau_texsubimage_1d;
 	functions->TexSubImage2D = nouveau_texsubimage_2d;
 	functions->TexSubImage3D = nouveau_texsubimage_3d;
-	functions->GetTexImage = nouveau_get_teximage;
+	// functions->GetTexImage = nouveau_get_teximage;
+	functions->GetTexImage =  nouveau_GetTexImage;
+	functions->GetCompressedTexImage = nouveau_GetCompressedTexImage;
 	functions->BindTexture = nouveau_bind_texture;
 	functions->MapTexture = nouveau_texture_map;
 	functions->UnmapTexture = nouveau_texture_unmap;
diff --git a/src/mesa/drivers/dri/nouveau/nv10_context.c b/src/mesa/drivers/dri/nouveau/nv10_context.c
index b6d1036..b39c2bc 100644
--- a/src/mesa/drivers/dri/nouveau/nv10_context.c
+++ b/src/mesa/drivers/dri/nouveau/nv10_context.c
@@ -34,6 +34,8 @@
 
 static const struct dri_extension nv10_extensions[] = {
 	{ "GL_EXT_texture_rectangle",	NULL },
+	{ "GL_EXT_texture_compression_s3tc",  NULL },
+	{ "GL_S3_s3tc", NULL },
 	{ NULL,				NULL }
 };
 
diff --git a/src/mesa/drivers/dri/nouveau/nv10_state_tex.c b/src/mesa/drivers/dri/nouveau/nv10_state_tex.c
index 6dedb18..9bb8c42 100644
--- a/src/mesa/drivers/dri/nouveau/nv10_state_tex.c
+++ b/src/mesa/drivers/dri/nouveau/nv10_state_tex.c
@@ -96,6 +96,14 @@ static uint32_t
 get_tex_format_pot(struct gl_texture_image *ti)
 {
 	switch (ti->TexFormat) {
+	case MESA_FORMAT_RGB_DXT1:
+	case MESA_FORMAT_RGBA_DXT1:
+		return NV10TCL_TX_FORMAT_FORMAT_DXT1;
+	case MESA_FORMAT_RGBA_DXT3:
+		return NV10TCL_TX_FORMAT_FORMAT_DXT3;
+	case MESA_FORMAT_RGBA_DXT5:
+		return NV10TCL_TX_FORMAT_FORMAT_DXT5;
+	
 	case MESA_FORMAT_ARGB8888:
 		return NV10TCL_TX_FORMAT_FORMAT_A8R8G8B8;