[Nouveau] nv50 dxt / s3tc

Xavier Chantry chantry.xavier at gmail.com
Sun May 2 15:44:38 PDT 2010


flightgear now dies with :
Mesa warning: external dxt library not available: texstore_rgba_dxt3
util/u_format_s3tc.c:66:util_format_dxt3_rgba_fetch_stub: Assertion `0' failed.

I don't really understand what these stubs are about, they were
introduced by following commit :
commit d96e87c3c513f8ed350ae24425edb74b6d6fcc13
Author: José Fonseca <jfonseca at vmware.com>
Date:   Wed Apr 7 20:47:38 2010 +0100

    util: Use stubs for the dynamically loaded S3TC functions.

    Loosely based on Luca Barbieri's commit
    52e9b990a192a9329006d5f7dd2ac222effea5a5.

Looking at llvm and r300 code and trying to guess, I came up with the
following patch that allows flightgear to start again. But I don't
really understand that stuff so it could be wrong.
nvfx is probably affected as well.


diff --git a/src/gallium/drivers/nouveau/nouveau_screen.c
b/src/gallium/drivers/nouveau/nouveau_screen.c
index 233a91a..a91b00b 100644
--- a/src/gallium/drivers/nouveau/nouveau_screen.c
+++ b/src/gallium/drivers/nouveau/nouveau_screen.c
@@ -5,6 +5,7 @@
 #include "util/u_memory.h"
 #include "util/u_inlines.h"
 #include "util/u_format.h"
+#include "util/u_format_s3tc.h"

 #include <stdio.h>
 #include <errno.h>
@@ -248,6 +249,8 @@ nouveau_screen_init(struct nouveau_screen *screen,
struct nouveau_device *dev)
 	pscreen->fence_signalled = nouveau_screen_fence_signalled;
 	pscreen->fence_finish = nouveau_screen_fence_finish;

+	util_format_s3tc_init();
+
 	return 0;
 }

diff --git a/src/gallium/drivers/nv50/nv50_screen.c
b/src/gallium/drivers/nv50/nv50_screen.c
index 2dd1042..0d74c90 100644
--- a/src/gallium/drivers/nv50/nv50_screen.c
+++ b/src/gallium/drivers/nv50/nv50_screen.c
@@ -20,6 +20,7 @@
  * SOFTWARE.
  */

+#include "util/u_format_s3tc.h"
 #include "pipe/p_screen.h"

 #include "nv50_context.h"
@@ -72,10 +73,6 @@ nv50_screen_is_format_supported(struct pipe_screen *pscreen,
 		case PIPE_FORMAT_A8_UNORM:
 		case PIPE_FORMAT_I8_UNORM:
 		case PIPE_FORMAT_L8A8_UNORM:
-		case PIPE_FORMAT_DXT1_RGB:
-		case PIPE_FORMAT_DXT1_RGBA:
-		case PIPE_FORMAT_DXT3_RGBA:
-		case PIPE_FORMAT_DXT5_RGBA:
 		case PIPE_FORMAT_S8_USCALED_Z24_UNORM:
 		case PIPE_FORMAT_Z24_UNORM_S8_USCALED:
 		case PIPE_FORMAT_Z32_FLOAT:
@@ -85,6 +82,11 @@ nv50_screen_is_format_supported(struct pipe_screen *pscreen,
 		case PIPE_FORMAT_R16G16_SNORM:
 		case PIPE_FORMAT_R16G16_UNORM:
 			return TRUE;
+		case PIPE_FORMAT_DXT1_RGB:
+		case PIPE_FORMAT_DXT1_RGBA:
+		case PIPE_FORMAT_DXT3_RGBA:
+		case PIPE_FORMAT_DXT5_RGBA:
+			return util_format_s3tc_enabled;
 		default:
 			break;
 		}


More information about the Nouveau mailing list