aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/mesa/vbo/vbo_exec.c27
1 files changed, 27 insertions, 0 deletions
diff --git a/src/mesa/vbo/vbo_exec.c b/src/mesa/vbo/vbo_exec.c
index afda3635fc9..8fae73adfa2 100644
--- a/src/mesa/vbo/vbo_exec.c
+++ b/src/mesa/vbo/vbo_exec.c
@@ -256,11 +256,36 @@ vbo_copy_vertices(struct gl_context *ctx,
copy = count % 3;
break;
case GL_QUADS:
+ case GL_LINES_ADJACENCY:
copy = count % 4;
break;
+ case GL_TRIANGLES_ADJACENCY:
+ copy = count % 6;
+ break;
case GL_LINE_STRIP:
copy = MIN2(1, count);
break;
+ case GL_LINE_STRIP_ADJACENCY:
+ /* We need to copy 3 vertices, because:
+ * Last strip: ---o---o---x (last line)
+ * Next strip: x---o---o--- (next line)
+ */
+ copy = MIN2(3, count);
+ break;
+ case GL_PATCHES:
+ if (in_dlist) {
+ /* We don't know the value of GL_PATCH_VERTICES when compiling
+ * a display list.
+ *
+ * Fail an assertion in debug builds and use the value of 3
+ * in release builds, which is more likely than any other value.
+ */
+ assert(!"patch_vertices is unknown");
+ copy = count % 3;
+ } else {
+ copy = count % ctx->TessCtrlProgram.patch_vertices;
+ }
+ break;
case GL_LINE_LOOP:
if (!in_dlist && last_prim->begin == 0) {
/* We're dealing with the second or later section of a split/wrapped
@@ -299,6 +324,8 @@ vbo_copy_vertices(struct gl_context *ctx,
break;
case PRIM_OUTSIDE_BEGIN_END:
return 0;
+ case GL_TRIANGLE_STRIP_ADJACENCY:
+ /* TODO: Splitting tri strips with adjacency is too complicated. */
default:
unreachable("Unexpected primitive type");
return 0;