i965/gs: implement EndPrimitive() functionality in the visitor.
[mesa.git] / src / mesa / drivers / dri / nouveau / nouveau_render_t.c
index e0cf727d11d809c584d372f4b9acb49fe80d6b41..0063dac2d78ab2495d19f84e116ffd1545f09f12 100644 (file)
                }                                                       \
        } 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_pushbuf *push = context_push(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(I32, ctx, start, delta, n);
-               };
+       EMIT_VBO(L, ctx, start, delta, n);
+}
 
-               return f;
+static void
+dispatch_i32(struct gl_context *ctx, unsigned int start, int delta,
+            unsigned int n)
+{
+       struct nouveau_pushbuf *push = context_push(ctx);
+       RENDER_LOCALS(ctx);
 
-       } else {
-               auto void f(struct gl_context *, unsigned int, int, unsigned int);
+       EMIT_VBO(I32, ctx, start, delta, n);
+}
 
-               void f(struct gl_context *ctx, unsigned int start, int delta,
-                      unsigned int n) {
-                       struct nouveau_channel *chan = context_chan(ctx);
-                       RENDER_LOCALS(ctx);
+static void
+dispatch_i16(struct gl_context *ctx, unsigned int start, int delta,
+            unsigned int n)
+{
+       struct nouveau_pushbuf *push = context_push(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;
 }
 
 /*