mesa: Branch 'master' - 2 commits

Brian Paul brianp at kemper.freedesktop.org
Sat Mar 10 18:50:55 UTC 2007


 src/mesa/main/getstring.c         |    3 -
 src/mesa/x86/mmx_blend.S          |   41 +++++++++++++++---
 src/mesa/x86/read_rgba_span_x86.S |   86 ++++++++++++++++++++++++++++++++++++++
 3 files changed, 124 insertions(+), 6 deletions(-)

New commits:
diff-tree 7d39c1ae76cc7dc6793980fd83db100399ee9179 (from 823c041fdefa772fc1b06c87f71b0ee3291a00db)
Author: Brian <brian at yutani.localnet.net>
Date:   Sat Mar 10 11:50:50 2007 -0700

    Fix TEXREL issues.
    
    Patch submitted by Christoph Brill.
    See http://www.gentoo.org/proj/en/hardened/pic-fix-guide.xml

diff --git a/src/mesa/x86/mmx_blend.S b/src/mesa/x86/mmx_blend.S
index 397d635..20ac5a2 100644
--- a/src/mesa/x86/mmx_blend.S
+++ b/src/mesa/x86/mmx_blend.S
@@ -1,4 +1,4 @@
-
+	;
 /*
  * Written by José Fonseca <j_r_fonseca at yahoo.co.uk>
  */
@@ -240,7 +240,9 @@ TWO(PUNPCKHDQ  ( MA2, MA2 ))            
 ONE(MOVD       ( MSS, REGIND(rgba) ))		/*     |     |     |     | sa1 | sb1 | sg1 | sr1 */	;\
 TWO(MOVQ       ( MSS, REGIND(rgba) ))		/* sa2 | sb2 | sg2 | sr2 | sa1 | sb1 | sg1 | sr1 */
 
-
+/* Kevin F. Quinn <kevquinn at gentoo.org> 2 July 2006
+ * Replace data segment constants with text-segment
+ * constants (via pushl/movq)
     SEG_DATA
 
 ALIGNDATA8
@@ -249,6 +251,11 @@ const_0080:
 
 const_80:
     D_LONG 0x80808080, 0x80808080
+*/
+#define const_0080_l 0x00800080
+#define const_0080_h 0x00800080
+#define const_80_l 0x80808080
+#define const_80_h 0x80808080
 
     SEG_TEXT
 
@@ -302,8 +309,16 @@ TWO(MOVQ       ( MM1, REGIND(rgba) ))
 #define TAG(x) CONCAT(x,_min)
 #define LLTAG(x) LLBL2(x,_min)
 
+/* Kevin F. Quinn 2nd July 2006
+ * Replace data segment constants with text-segment instructions
+#define INIT \
+    MOVQ       ( CONTENT(const_80), MM7 )
+ */
 #define INIT \
-    MOVQ       ( CONTENT(const_80), MM7 )	/* 0x80| 0x80| 0x80| 0x80| 0x80| 0x80| 0x80| 0x80*/
+    PUSH_L     ( CONST(const_80_h) ) 		/* 0x80| 0x80| 0x80| 0x80| 0x80| 0x80| 0x80| 0x80*/	;\
+    PUSH_L     ( CONST(const_80_l) ) 									;\
+    MOVQ       ( REGIND(ESP), MM7 ) 									;\
+    ADD_L      ( CONST(8), ESP)
 
 #define MAIN( rgba, dest ) \
     GMB_LOAD( rgba, dest, MM1, MM2 )									;\
@@ -326,8 +341,16 @@ TWO(MOVQ       ( MM1, REGIND(rgba) ))
 #define TAG(x) CONCAT(x,_max)
 #define LLTAG(x) LLBL2(x,_max)
 
+/* Kevin F. Quinn 2nd July 2006
+ * Replace data segment constants with text-segment instructions
 #define INIT \
-    MOVQ       ( CONTENT(const_80), MM7 )	/* 0x80| 0x80| 0x80| 0x80| 0x80| 0x80| 0x80| 0x80*/
+    MOVQ       ( CONTENT(const_80), MM7 )
+ */
+#define INIT \
+    PUSH_L     ( CONST(const_80_l) ) 		/* 0x80| 0x80| 0x80| 0x80| 0x80| 0x80| 0x80| 0x80*/	;\
+    PUSH_L     ( CONST(const_80_h) ) 									;\
+    MOVQ       ( REGIND(ESP), MM7 ) 									;\
+    ADD_L      ( CONST(8), ESP)
 
 #define MAIN( rgba, dest ) \
     GMB_LOAD( rgba, dest, MM1, MM2 )									;\
@@ -350,9 +373,17 @@ TWO(MOVQ       ( MM1, REGIND(rgba) ))
 #define TAG(x) CONCAT(x,_modulate)
 #define LLTAG(x) LLBL2(x,_modulate)
 
+/* Kevin F. Quinn 2nd July 2006
+ * Replace data segment constants with text-segment instructions
+#define INIT \
+    MOVQ       ( CONTENT(const_0080), MM7 )
+ */
 #define INIT \
     PXOR       ( MM0, MM0 )			/*   0x0000  |   0x0000  |   0x0000  |   0x0000  */	;\
-    MOVQ       ( CONTENT(const_0080), MM7 )	/*   0x0080  |   0x0080  |   0x0080  |   0x0080  */
+    PUSH_L     ( CONST(const_0080_l) ) 	/*   0x0080  |   0x0080  |   0x0080  |   0x0080  */	;\
+    PUSH_L     ( CONST(const_0080_h) ) 								;\
+    MOVQ       ( REGIND(ESP), MM7 ) 									;\
+    ADD_L      ( CONST(8), ESP)
 
 #define MAIN( rgba, dest ) \
     GMB_LOAD( rgba, dest, MM1, MM2 )									;\
diff --git a/src/mesa/x86/read_rgba_span_x86.S b/src/mesa/x86/read_rgba_span_x86.S
index 960cffa..a690283 100644
--- a/src/mesa/x86/read_rgba_span_x86.S
+++ b/src/mesa/x86/read_rgba_span_x86.S
@@ -32,6 +32,8 @@
 
 	.file	"read_rgba_span_x86.S"
 #if !defined(__DJGPP__) && !defined(__MINGW32__) /* this one cries for assyntax.h */
+/* Kevin F. Quinn 2nd July 2006
+ * Replace data segment constants with text-segment instructions
 	.section	.rodata
 	.align 16
 	.type	mask, @object
@@ -45,6 +47,19 @@ mask:
 	.long	0x00ff0000
 	.long	0x00ff0000
 	.long	0x00ff0000
+ */
+#define	LOAD_MASK(mvins,m1,m2) \
+   	pushl	$0xff00ff00 ;\
+   	pushl	$0xff00ff00 ;\
+   	pushl	$0xff00ff00 ;\
+   	pushl	$0xff00ff00 ;\
+	mvins	(%esp), m1	;\
+   	pushl	$0x00ff0000 ;\
+   	pushl	$0x00ff0000 ;\
+   	pushl	$0x00ff0000 ;\
+   	pushl	$0x00ff0000 ;\
+	mvins	(%esp), m2	;\
+	addl	$32, %esp
 
 
 /* I implemented these as macros because the appear in quite a few places,
@@ -84,8 +99,12 @@ _generic_read_RGBA_span_BGRA8888_REV_MMX
 #ifdef USE_INNER_EMMS
 	emms
 #endif
+/* Kevin F. Quinn 2nd July 2006
+ * Replace data segment constants with text-segment instructions
 	movq	mask, %mm1
 	movq	mask+16, %mm2
+ */
+	LOAD_MASK(movq,%mm1,%mm2)
 
 	movl	8(%esp), %ebx	/* source pointer */
 	movl	16(%esp), %edx	/* number of pixels to copy */
@@ -182,8 +201,12 @@ _generic_read_RGBA_span_BGRA8888_REV_SSE
 #ifdef USE_INNER_EMMS
 	emms
 #endif
+/* Kevin F. Quinn 2nd July 2006
+ * Replace data segment constants with text-segment instructions
 	movq	mask, %mm1
 	movq	mask+16, %mm2
+ */
+	LOAD_MASK(movq,%mm1,%mm2)
 
 	movl	16(%esp), %ebx	/* source pointer */
 	movl	24(%esp), %edx	/* number of pixels to copy */
@@ -341,8 +364,12 @@ _generic_read_RGBA_span_BGRA8888_REV_SSE
 	pushl	%esi
 	pushl	%ebx
 
+/* Kevin F. Quinn 2nd July 2006
+ * Replace data segment constants with text-segment instructions
 	movdqa	mask, %xmm1
 	movdqa	mask+16, %xmm2
+ */
+	LOAD_MASK(movdqa,%xmm1,%xmm2)
 
 	movl	12(%esp), %ebx	/* source pointer */
 	movl	20(%esp), %edx	/* number of pixels to copy */
@@ -464,6 +491,10 @@ _generic_read_RGBA_span_BGRA8888_REV_SSE
 
 
 
+/* Kevin F. Quinn 2nd July 2006
+ * Replace data segment constants with text-segment instructions
+ */
+#if 0
 	.section	.rodata
 
 	.align	16
@@ -510,6 +541,26 @@ scale:
 
 alpha:	.long	0x00000000
 	.long	0x00ff0000
+#endif
+
+#define MASK_565_L	0x07e0f800
+#define MASK_565_H	0x0000001f
+#define SCALE_ADJUST	5
+#if SCALE_ADJUST == 5
+#define PRESCALE_L 0x00100001
+#define PRESCALE_H 0x00000200
+#define SCALE_L 0x40C620E8
+#define SCALE_H 0x0000839d
+#elif SCALE_ADJUST == 0
+#define PRESCALE_L 0x00200001
+#define PRESCALE_H 0x00000800
+#define SCALE_L 0x01040108
+#define SCALE_H 0x00000108
+#else
+#error SCALE_ADJUST must either be 5 or 0.
+#endif
+#define ALPHA_L 0x00000000
+#define ALPHA_H 0x00ff0000
 
 /**
  * MMX optimized version of the RGB565 to RGBA copy routine.
@@ -530,9 +581,25 @@ _generic_read_RGBA_span_RGB565_MMX:
 	movl	8(%esp), %edx	/* destination pointer */
 	movl	12(%esp), %ecx	/* number of pixels to copy */
 
+/* Kevin F. Quinn 2nd July 2006
+ * Replace data segment constants with text-segment instructions
 	movq	mask_565, %mm5
 	movq	prescale, %mm6
 	movq	scale, %mm7
+ */
+ 	pushl	MASK_565_H
+ 	pushl	MASK_565_L
+	movq	(%esp), %mm5
+ 	pushl	PRESCALE_H
+ 	pushl	PRESCALE_L
+	movq	(%esp), %mm6
+ 	pushl	SCALE_H
+ 	pushl	SCALE_L
+	movq	(%esp), %mm7
+ 	pushl	ALPHA_H
+ 	pushl	ALPHA_L
+	movq	(%esp), %mm3
+	addl	$32,%esp
 
 	sarl	$2, %ecx
 	jle	.L01		/* Bail early if the count is negative. */
@@ -581,8 +648,13 @@ _generic_read_RGBA_span_RGB565_MMX:
 	/* Always set the alpha value to 0xff.
 	 */
 
+/* Kevin F. Quinn 2nd July 2006
+ * Replace data segment constants with text-segment instructions
 	por	alpha, %mm0
 	por	alpha, %mm2
+ */
+ 	por %mm3, %mm0
+ 	por %mm3, %mm2
 
 
 	/* Pack the 16-bit values to 8-bit values and store the converted
@@ -609,8 +681,13 @@ _generic_read_RGBA_span_RGB565_MMX:
 	pmulhuw	%mm7, %mm0
 	pmulhuw	%mm7, %mm2
 
+/* Kevin F. Quinn 2nd July 2006
+ * Replace data segment constants with text-segment instructions
 	por	alpha, %mm0
 	por	alpha, %mm2
+ */
+ 	por %mm3, %mm0
+ 	por %mm3, %mm2
 
 	packuswb	%mm2, %mm0
 
@@ -647,8 +724,13 @@ _generic_read_RGBA_span_RGB565_MMX:
 	pmulhuw	%mm7, %mm0
 	pmulhuw	%mm7, %mm2
 
+/* Kevin F. Quinn 2nd July 2006
+ * Replace data segment constants with text-segment instructions
 	por	alpha, %mm0
 	por	alpha, %mm2
+ */
+ 	por %mm3, %mm0
+ 	por %mm3, %mm2
 
 	packuswb	%mm2, %mm0
 
@@ -675,7 +757,11 @@ _generic_read_RGBA_span_RGB565_MMX:
 #endif
 	pmulhuw	%mm7, %mm0
 
+/* Kevin F. Quinn 2nd July 2006
+ * Replace data segment constants with text-segment instructions
 	por	alpha, %mm0
+ */
+ 	por %mm3, %mm0
 
 	packuswb	%mm0, %mm0
 
diff-tree 823c041fdefa772fc1b06c87f71b0ee3291a00db (from 38f7f81518a434e0c70131a36396e0cf52e7b698)
Author: Brian <brian at yutani.localnet.net>
Date:   Sat Mar 10 11:48:59 2007 -0700

    check for EXT_blend_equation_separate for 2.0

diff --git a/src/mesa/main/getstring.c b/src/mesa/main/getstring.c
index f033ddc..0c925ed 100644
--- a/src/mesa/main/getstring.c
+++ b/src/mesa/main/getstring.c
@@ -114,7 +114,8 @@ _mesa_GetString( GLenum name )
                       ctx->Extensions.ARB_shader_objects &&
                       ctx->Extensions.ARB_vertex_shader &&
                       ctx->Extensions.ARB_fragment_shader &&
-                      ctx->Extensions.ARB_texture_non_power_of_two) {
+                      ctx->Extensions.ARB_texture_non_power_of_two &&
+                      ctx->Extensions.EXT_blend_equation_separate) {
                      if (ctx->Extensions.ARB_shading_language_120 &&
                          ctx->Extensions.EXT_pixel_buffer_object &&
                          ctx->Extensions.EXT_texture_sRGB) {



More information about the mesa-commit mailing list