aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMartin Wilke <miwi@FreeBSD.org>2012-06-10 05:47:43 +0000
committerMartin Wilke <miwi@FreeBSD.org>2012-06-10 05:47:43 +0000
commitb72aa3dce33bd1e2ec8d6f99aa6c51a1c56bd537 (patch)
treef492dad7976911cad89bceafbb69fe777058f828
parentdc23a23e18fb886072b6ddc49946723576f966f2 (diff)
downloadports-b72aa3dce33bd1e2ec8d6f99aa6c51a1c56bd537.tar.gz
ports-b72aa3dce33bd1e2ec8d6f99aa6c51a1c56bd537.zip
Notes
-rw-r--r--graphics/libGL/bsd.mesalib.mk4
-rw-r--r--graphics/libGL/files/extra-src__mesa__drivers__dri__nouveau__nouveau_array.c99
-rw-r--r--graphics/libGL/files/extra-src__mesa__drivers__dri__nouveau__nouveau_render_t.c91
3 files changed, 193 insertions, 1 deletions
diff --git a/graphics/libGL/bsd.mesalib.mk b/graphics/libGL/bsd.mesalib.mk
index c01d7f4752d5..102de0e79b24 100644
--- a/graphics/libGL/bsd.mesalib.mk
+++ b/graphics/libGL/bsd.mesalib.mk
@@ -55,7 +55,9 @@ CONFIGURE_ARGS+=--enable-gallium-llvm=no --without-gallium-drivers \
.if defined(WITH_NEW_XORG)
EXTRA_PATCHES+= ${PATCHDIR}/extra-mach64_context.h \
${PATCHDIR}/extra-sis_context.h \
- ${PATCHDIR}/extra-src-glsl_ir_constant_expression.cpp
+ ${PATCHDIR}/extra-src-glsl_ir_constant_expression.cpp \
+ ${PATCHDIR}/extra-src__mesa__drivers__dri__nouveau__nouveau_array.c \
+ ${PATCHDIR}/extra-src__mesa__drivers__dri__nouveau__nouveau_render_t.c
.else
EXTRA_PATCHES+= ${PATCHDIR}/extra-src__mesa__x86-64__glapi_x86-64.S \
${PATCHDIR}/extra-src__mesa__x86-64__xform4.S \
diff --git a/graphics/libGL/files/extra-src__mesa__drivers__dri__nouveau__nouveau_array.c b/graphics/libGL/files/extra-src__mesa__drivers__dri__nouveau__nouveau_array.c
new file mode 100644
index 000000000000..c07a519ef25f
--- /dev/null
+++ b/graphics/libGL/files/extra-src__mesa__drivers__dri__nouveau__nouveau_array.c
@@ -0,0 +1,99 @@
+--- src/mesa/drivers/dri/nouveau/nouveau_array.c.orig 2011-01-06 01:19:15.000000000 +0100
++++ src/mesa/drivers/dri/nouveau/nouveau_array.c 2012-04-28 18:27:06.000000000 +0200
+@@ -29,54 +29,71 @@
+ #include "nouveau_array.h"
+ #include "nouveau_bufferobj.h"
+
++#define EXTRACT(in_t, out_t) extract_func_##in_t##_to_##out_t
++
++#define EXTRACT_FUNC(in_t, out_t, k) \
++static out_t EXTRACT(in_t, out_t) \
++(struct nouveau_array *a, int i, int j) { \
++ in_t x = ((in_t *)(a->buf + i * a->stride))[j]; \
++ \
++ return (out_t)x / (k); \
++}
++
++EXTRACT_FUNC(GLchar, unsigned, 1);
++EXTRACT_FUNC(GLchar, float, SCHAR_MAX);
++EXTRACT_FUNC(GLubyte, unsigned, 1);
++EXTRACT_FUNC(GLubyte, float, UCHAR_MAX);
++EXTRACT_FUNC(GLshort, unsigned, 1);
++EXTRACT_FUNC(GLshort, float, SHRT_MAX);
++EXTRACT_FUNC(GLushort, unsigned, 1);
++EXTRACT_FUNC(GLushort, float, USHRT_MAX);
++EXTRACT_FUNC(GLint, unsigned, 1);
++EXTRACT_FUNC(GLint, float, INT_MAX);
++EXTRACT_FUNC(GLuint, unsigned, 1);
++EXTRACT_FUNC(GLuint, float, UINT_MAX);
++EXTRACT_FUNC(GLfloat, unsigned, 1.0 / UINT_MAX);
++EXTRACT_FUNC(GLfloat, float, 1);
++
++#undef EXTRACT_FUNC
++
+ static void
+ get_array_extract(struct nouveau_array *a, extract_u_t *extract_u,
+ extract_f_t *extract_f)
+ {
+-#define EXTRACT(in_t, out_t, k) \
+- ({ \
+- auto out_t f(struct nouveau_array *, int, int); \
+- out_t f(struct nouveau_array *a, int i, int j) { \
+- in_t x = ((in_t *)(a->buf + i * a->stride))[j]; \
+- \
+- return (out_t)x / (k); \
+- }; \
+- f; \
+- });
+-
+ switch (a->type) {
+ case GL_BYTE:
+- *extract_u = EXTRACT(char, unsigned, 1);
+- *extract_f = EXTRACT(char, float, SCHAR_MAX);
++ *extract_u = EXTRACT(GLchar, unsigned);
++ *extract_f = EXTRACT(GLchar, float);
+ break;
+ case GL_UNSIGNED_BYTE:
+- *extract_u = EXTRACT(unsigned char, unsigned, 1);
+- *extract_f = EXTRACT(unsigned char, float, UCHAR_MAX);
++ *extract_u = EXTRACT(GLubyte, unsigned);
++ *extract_f = EXTRACT(GLubyte, float);
+ break;
+ case GL_SHORT:
+- *extract_u = EXTRACT(short, unsigned, 1);
+- *extract_f = EXTRACT(short, float, SHRT_MAX);
++ *extract_u = EXTRACT(GLshort, unsigned);
++ *extract_f = EXTRACT(GLshort, float);
+ break;
+ case GL_UNSIGNED_SHORT:
+- *extract_u = EXTRACT(unsigned short, unsigned, 1);
+- *extract_f = EXTRACT(unsigned short, float, USHRT_MAX);
++ *extract_u = EXTRACT(GLushort, unsigned);
++ *extract_f = EXTRACT(GLushort, float);
+ break;
+ case GL_INT:
+- *extract_u = EXTRACT(int, unsigned, 1);
+- *extract_f = EXTRACT(int, float, INT_MAX);
++ *extract_u = EXTRACT(GLint, unsigned);
++ *extract_f = EXTRACT(GLint, float);
+ break;
+ case GL_UNSIGNED_INT:
+- *extract_u = EXTRACT(unsigned int, unsigned, 1);
+- *extract_f = EXTRACT(unsigned int, float, UINT_MAX);
++ *extract_u = EXTRACT(GLuint, unsigned);
++ *extract_f = EXTRACT(GLuint, float);
+ break;
+ case GL_FLOAT:
+- *extract_u = EXTRACT(float, unsigned, 1.0 / UINT_MAX);
+- *extract_f = EXTRACT(float, float, 1);
++ *extract_u = EXTRACT(GLfloat, unsigned);
++ *extract_f = EXTRACT(GLfloat, float);
+ break;
+ default:
+ assert(0);
+ }
+ }
++#undef EXTRACT
+
+ void
+ nouveau_init_array(struct nouveau_array *a, int attr, int stride,
diff --git a/graphics/libGL/files/extra-src__mesa__drivers__dri__nouveau__nouveau_render_t.c b/graphics/libGL/files/extra-src__mesa__drivers__dri__nouveau__nouveau_render_t.c
new file mode 100644
index 000000000000..7c29328546ef
--- /dev/null
+++ b/graphics/libGL/files/extra-src__mesa__drivers__dri__nouveau__nouveau_render_t.c
@@ -0,0 +1,91 @@
+--- src/mesa/drivers/dri/nouveau/nouveau_render_t.c.orig 2011-01-06 01:19:34.000000000 +0100
++++ src/mesa/drivers/dri/nouveau/nouveau_render_t.c 2012-04-28 18:27:06.000000000 +0200
+@@ -97,52 +97,49 @@
+ } \
+ } while (0)
+
+-/*
+- * Select an appropriate dispatch function for the given index buffer.
+- */
+-static dispatch_t
+-get_array_dispatch(struct nouveau_array *a)
++static void
++dispatch_l(struct gl_context *ctx, unsigned int start, int delta,
++ unsigned int n)
+ {
+- if (!a->fields) {
+- auto void f(struct gl_context *, unsigned int, int, unsigned int);
+-
+- void f(struct gl_context *ctx, unsigned int start, int delta,
+- unsigned int n) {
+- struct nouveau_channel *chan = context_chan(ctx);
+- RENDER_LOCALS(ctx);
++ struct nouveau_channel *chan = context_chan(ctx);
++ RENDER_LOCALS(ctx);
+
+- EMIT_VBO(L, ctx, start, delta, n);
+- };
+-
+- return f;
+-
+- } else if (a->type == GL_UNSIGNED_INT) {
+- auto void f(struct gl_context *, unsigned int, int, unsigned int);
+-
+- void f(struct gl_context *ctx, unsigned int start, int delta,
+- unsigned int n) {
+- struct nouveau_channel *chan = context_chan(ctx);
+- RENDER_LOCALS(ctx);
++ EMIT_VBO(L, ctx, start, delta, n);
++}
+
+- EMIT_VBO(I32, ctx, start, delta, n);
+- };
++static void
++dispatch_i32(struct gl_context *ctx, unsigned int start, int delta,
++ unsigned int n)
++{
++ struct nouveau_channel *chan = context_chan(ctx);
++ RENDER_LOCALS(ctx);
+
+- return f;
++ EMIT_VBO(I32, ctx, start, delta, n);
++}
+
+- } else {
+- auto void f(struct gl_context *, unsigned int, int, unsigned int);
++static void
++dispatch_i16(struct gl_context *ctx, unsigned int start, int delta,
++ unsigned int n)
++{
++ struct nouveau_channel *chan = context_chan(ctx);
++ RENDER_LOCALS(ctx);
+
+- void f(struct gl_context *ctx, unsigned int start, int delta,
+- unsigned int n) {
+- struct nouveau_channel *chan = context_chan(ctx);
+- RENDER_LOCALS(ctx);
+-
+- EMIT_VBO(I32, ctx, start, delta, n & 1);
+- EMIT_VBO(I16, ctx, start, delta, n & ~1);
+- };
++ EMIT_VBO(I32, ctx, start, delta, n & 1);
++ EMIT_VBO(I16, ctx, start, delta, n & ~1);
++}
+
+- return f;
+- }
++/*
++ * Select an appropriate dispatch function for the given index buffer.
++ */
++static dispatch_t
++get_array_dispatch(struct nouveau_array *a)
++{
++ if (!a->fields)
++ return dispatch_l;
++ else if (a->type == GL_UNSIGNED_INT)
++ return dispatch_i32;
++ else
++ return dispatch_i16;
+ }
+
+ /*