View | Details | Raw Unified | Return to bug 168902
Collapse All | Expand All

(-)graphics/libGL/bsd.mesalib.mk (-1 / +3 lines)
Lines 55-61 Link Here
55
.if defined(WITH_NEW_XORG)
55
.if defined(WITH_NEW_XORG)
56
EXTRA_PATCHES+=	${PATCHDIR}/extra-mach64_context.h \
56
EXTRA_PATCHES+=	${PATCHDIR}/extra-mach64_context.h \
57
		${PATCHDIR}/extra-sis_context.h \
57
		${PATCHDIR}/extra-sis_context.h \
58
		${PATCHDIR}/extra-src-glsl_ir_constant_expression.cpp
58
		${PATCHDIR}/extra-src-glsl_ir_constant_expression.cpp \
59
		${PATCHDIR}/extra-src__mesa__drivers__dri__nouveau__nouveau_array.c \
60
		${PATCHDIR}/extra-src__mesa__drivers__dri__nouveau__nouveau_render_t.c
59
.else
61
.else
60
EXTRA_PATCHES+=	${PATCHDIR}/extra-src__mesa__x86-64__glapi_x86-64.S \
62
EXTRA_PATCHES+=	${PATCHDIR}/extra-src__mesa__x86-64__glapi_x86-64.S \
61
		${PATCHDIR}/extra-src__mesa__x86-64__xform4.S \
63
		${PATCHDIR}/extra-src__mesa__x86-64__xform4.S \
(-)graphics/libGL/files/extra-src__mesa__drivers__dri__nouveau__nouveau_array.c (+99 lines)
Added Link Here
1
--- src/mesa/drivers/dri/nouveau/nouveau_array.c.orig	2011-01-06 01:19:15.000000000 +0100
2
+++ src/mesa/drivers/dri/nouveau/nouveau_array.c	2012-04-28 18:27:06.000000000 +0200
3
@@ -29,54 +29,71 @@
4
 #include "nouveau_array.h"
5
 #include "nouveau_bufferobj.h"
6
 
7
+#define EXTRACT(in_t, out_t) extract_func_##in_t##_to_##out_t
8
+
9
+#define EXTRACT_FUNC(in_t, out_t, k)			\
10
+static out_t EXTRACT(in_t, out_t)			\
11
+(struct nouveau_array *a, int i, int j) {		\
12
+	in_t x = ((in_t *)(a->buf + i * a->stride))[j];	\
13
+							\
14
+	return (out_t)x / (k);				\
15
+}
16
+
17
+EXTRACT_FUNC(GLchar, unsigned, 1);
18
+EXTRACT_FUNC(GLchar, float, SCHAR_MAX);
19
+EXTRACT_FUNC(GLubyte, unsigned, 1);
20
+EXTRACT_FUNC(GLubyte, float, UCHAR_MAX);
21
+EXTRACT_FUNC(GLshort, unsigned, 1);
22
+EXTRACT_FUNC(GLshort, float, SHRT_MAX);
23
+EXTRACT_FUNC(GLushort, unsigned, 1);
24
+EXTRACT_FUNC(GLushort, float, USHRT_MAX);
25
+EXTRACT_FUNC(GLint, unsigned, 1);
26
+EXTRACT_FUNC(GLint, float, INT_MAX);
27
+EXTRACT_FUNC(GLuint, unsigned, 1);
28
+EXTRACT_FUNC(GLuint, float, UINT_MAX);
29
+EXTRACT_FUNC(GLfloat, unsigned, 1.0 / UINT_MAX);
30
+EXTRACT_FUNC(GLfloat, float, 1);
31
+
32
+#undef EXTRACT_FUNC
33
+
34
 static void
35
 get_array_extract(struct nouveau_array *a, extract_u_t *extract_u,
36
 		  extract_f_t *extract_f)
37
 {
38
-#define EXTRACT(in_t, out_t, k)						\
39
-	({								\
40
-		auto out_t f(struct nouveau_array *, int, int);		\
41
-		out_t f(struct nouveau_array *a, int i, int j) {	\
42
-			in_t x = ((in_t *)(a->buf + i * a->stride))[j];	\
43
-									\
44
-			return (out_t)x / (k);				\
45
-		};							\
46
-		f;							\
47
-	});
48
-
49
 	switch (a->type) {
50
 	case GL_BYTE:
51
-		*extract_u = EXTRACT(char, unsigned, 1);
52
-		*extract_f = EXTRACT(char, float, SCHAR_MAX);
53
+		*extract_u = EXTRACT(GLchar, unsigned);
54
+		*extract_f = EXTRACT(GLchar, float);
55
 		break;
56
 	case GL_UNSIGNED_BYTE:
57
-		*extract_u = EXTRACT(unsigned char, unsigned, 1);
58
-		*extract_f = EXTRACT(unsigned char, float, UCHAR_MAX);
59
+		*extract_u = EXTRACT(GLubyte, unsigned);
60
+		*extract_f = EXTRACT(GLubyte, float);
61
 		break;
62
 	case GL_SHORT:
63
-		*extract_u = EXTRACT(short, unsigned, 1);
64
-		*extract_f = EXTRACT(short, float, SHRT_MAX);
65
+		*extract_u = EXTRACT(GLshort, unsigned);
66
+		*extract_f = EXTRACT(GLshort, float);
67
 		break;
68
 	case GL_UNSIGNED_SHORT:
69
-		*extract_u = EXTRACT(unsigned short, unsigned, 1);
70
-		*extract_f = EXTRACT(unsigned short, float, USHRT_MAX);
71
+		*extract_u = EXTRACT(GLushort, unsigned);
72
+		*extract_f = EXTRACT(GLushort, float);
73
 		break;
74
 	case GL_INT:
75
-		*extract_u = EXTRACT(int, unsigned, 1);
76
-		*extract_f = EXTRACT(int, float, INT_MAX);
77
+		*extract_u = EXTRACT(GLint, unsigned);
78
+		*extract_f = EXTRACT(GLint, float);
79
 		break;
80
 	case GL_UNSIGNED_INT:
81
-		*extract_u = EXTRACT(unsigned int, unsigned, 1);
82
-		*extract_f = EXTRACT(unsigned int, float, UINT_MAX);
83
+		*extract_u = EXTRACT(GLuint, unsigned);
84
+		*extract_f = EXTRACT(GLuint, float);
85
 		break;
86
 	case GL_FLOAT:
87
-		*extract_u = EXTRACT(float, unsigned, 1.0 / UINT_MAX);
88
-		*extract_f = EXTRACT(float, float, 1);
89
+		*extract_u = EXTRACT(GLfloat, unsigned);
90
+		*extract_f = EXTRACT(GLfloat, float);
91
 		break;
92
 	default:
93
 		assert(0);
94
 	}
95
 }
96
+#undef EXTRACT
97
 
98
 void
99
 nouveau_init_array(struct nouveau_array *a, int attr, int stride,
(-)graphics/libGL/files/extra-src__mesa__drivers__dri__nouveau__nouveau_render_t.c (+91 lines)
Added Link Here
1
--- src/mesa/drivers/dri/nouveau/nouveau_render_t.c.orig	2011-01-06 01:19:34.000000000 +0100
2
+++ src/mesa/drivers/dri/nouveau/nouveau_render_t.c	2012-04-28 18:27:06.000000000 +0200
3
@@ -97,52 +97,49 @@
4
 		}							\
5
 	} while (0)
6
 
7
-/*
8
- * Select an appropriate dispatch function for the given index buffer.
9
- */
10
-static dispatch_t
11
-get_array_dispatch(struct nouveau_array *a)
12
+static void
13
+dispatch_l(struct gl_context *ctx, unsigned int start, int delta,
14
+	   unsigned int n)
15
 {
16
-	if (!a->fields) {
17
-		auto void f(struct gl_context *, unsigned int, int, unsigned int);
18
-
19
-		void f(struct gl_context *ctx, unsigned int start, int delta,
20
-		       unsigned int n) {
21
-			struct nouveau_channel *chan = context_chan(ctx);
22
-			RENDER_LOCALS(ctx);
23
+	struct nouveau_channel *chan = context_chan(ctx);
24
+	RENDER_LOCALS(ctx);
25
 
26
-			EMIT_VBO(L, ctx, start, delta, n);
27
-		};
28
-
29
-		return f;
30
-
31
-	} else if (a->type == GL_UNSIGNED_INT) {
32
-		auto void f(struct gl_context *, unsigned int, int, unsigned int);
33
-
34
-		void f(struct gl_context *ctx, unsigned int start, int delta,
35
-		       unsigned int n) {
36
-			struct nouveau_channel *chan = context_chan(ctx);
37
-			RENDER_LOCALS(ctx);
38
+	EMIT_VBO(L, ctx, start, delta, n);
39
+}
40
 
41
-			EMIT_VBO(I32, ctx, start, delta, n);
42
-		};
43
+static void
44
+dispatch_i32(struct gl_context *ctx, unsigned int start, int delta,
45
+	     unsigned int n)
46
+{
47
+	struct nouveau_channel *chan = context_chan(ctx);
48
+	RENDER_LOCALS(ctx);
49
 
50
-		return f;
51
+	EMIT_VBO(I32, ctx, start, delta, n);
52
+}
53
 
54
-	} else {
55
-		auto void f(struct gl_context *, unsigned int, int, unsigned int);
56
+static void
57
+dispatch_i16(struct gl_context *ctx, unsigned int start, int delta,
58
+	     unsigned int n)
59
+{
60
+	struct nouveau_channel *chan = context_chan(ctx);
61
+	RENDER_LOCALS(ctx);
62
 
63
-		void f(struct gl_context *ctx, unsigned int start, int delta,
64
-		       unsigned int n) {
65
-			struct nouveau_channel *chan = context_chan(ctx);
66
-			RENDER_LOCALS(ctx);
67
-
68
-			EMIT_VBO(I32, ctx, start, delta, n & 1);
69
-			EMIT_VBO(I16, ctx, start, delta, n & ~1);
70
-		};
71
+	EMIT_VBO(I32, ctx, start, delta, n & 1);
72
+	EMIT_VBO(I16, ctx, start, delta, n & ~1);
73
+}
74
 
75
-		return f;
76
-	}
77
+/*
78
+ * Select an appropriate dispatch function for the given index buffer.
79
+ */
80
+static dispatch_t
81
+get_array_dispatch(struct nouveau_array *a)
82
+{
83
+	if (!a->fields)
84
+		return dispatch_l;
85
+	else if (a->type == GL_UNSIGNED_INT)
86
+		return dispatch_i32;
87
+	else
88
+		return dispatch_i16;
89
 }
90
 
91
 /*

Return to bug 168902