mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-04-22 09:40:40 +02:00
vbo: remove _mesa_prim parameter from vbo_merge_draws
glBegin/End won't use _mesa_prim, so we need to stop using it. Reviewed-by: Pierre-Eric Pelloux-Prayer <pierre-eric.pelloux-prayer@amd.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/7679>
This commit is contained in:
parent
9088058df0
commit
d2982f6061
4 changed files with 35 additions and 17 deletions
|
|
@ -170,20 +170,24 @@ vbo_try_prim_conversion(GLubyte *mode, unsigned *count)
|
|||
*/
|
||||
bool
|
||||
vbo_merge_draws(struct gl_context *ctx, bool in_dlist,
|
||||
struct _mesa_prim *p0, const struct _mesa_prim *p1)
|
||||
GLubyte mode0, GLubyte mode1,
|
||||
unsigned start0, unsigned start1,
|
||||
unsigned *count0, unsigned count1,
|
||||
unsigned basevertex0, unsigned basevertex1,
|
||||
bool *end0, bool begin1, bool end1)
|
||||
{
|
||||
/* The prim mode must match (ex: both GL_TRIANGLES) */
|
||||
if (p0->mode != p1->mode)
|
||||
if (mode0 != mode1)
|
||||
return false;
|
||||
|
||||
/* p1's vertices must come right after p0 */
|
||||
if (p0->start + p0->count != p1->start)
|
||||
if (start0 + *count0 != start1)
|
||||
return false;
|
||||
|
||||
/* This checks whether mode is equal to any line primitive type, taking
|
||||
* advantage of the fact that primitives types go from 0 to 14.
|
||||
*/
|
||||
if ((1 << p0->mode) &
|
||||
if ((1 << mode0) &
|
||||
((1 << GL_LINES) |
|
||||
(1 << GL_LINE_LOOP) |
|
||||
(1 << GL_LINE_STRIP) |
|
||||
|
|
@ -197,7 +201,7 @@ vbo_merge_draws(struct gl_context *ctx, bool in_dlist,
|
|||
* Other uses of "begin" are internal to the vbo module, and in those
|
||||
* cases, "begin" is not used after merging draws.
|
||||
*/
|
||||
if (p1->begin == 1 && (in_dlist || ctx->Line.StippleFlag))
|
||||
if (begin1 == 1 && (in_dlist || ctx->Line.StippleFlag))
|
||||
return false;
|
||||
|
||||
/* _mesa_prim::end is irrelevant at this point and is only used
|
||||
|
|
@ -205,34 +209,34 @@ vbo_merge_draws(struct gl_context *ctx, bool in_dlist,
|
|||
*/
|
||||
}
|
||||
|
||||
assert(p0->basevertex == p1->basevertex);
|
||||
assert(basevertex0 == basevertex1);
|
||||
|
||||
switch (p0->mode) {
|
||||
switch (mode0) {
|
||||
case GL_POINTS:
|
||||
/* can always merge subsequent GL_POINTS primitives */
|
||||
break;
|
||||
/* check independent primitives with no extra vertices */
|
||||
case GL_LINES:
|
||||
if (p0->count % 2)
|
||||
if (*count0 % 2)
|
||||
return false;
|
||||
break;
|
||||
case GL_TRIANGLES:
|
||||
if (p0->count % 3)
|
||||
if (*count0 % 3)
|
||||
return false;
|
||||
break;
|
||||
case GL_QUADS:
|
||||
case GL_LINES_ADJACENCY:
|
||||
if (p0->count % 4)
|
||||
if (*count0 % 4)
|
||||
return false;
|
||||
break;
|
||||
case GL_TRIANGLES_ADJACENCY:
|
||||
if (p0->count % 6)
|
||||
if (*count0 % 6)
|
||||
return false;
|
||||
break;
|
||||
case GL_PATCHES:
|
||||
/* "patch_vertices" can be unknown when compiling a display list. */
|
||||
if (in_dlist ||
|
||||
p0->count % ctx->TessCtrlProgram.patch_vertices)
|
||||
*count0 % ctx->TessCtrlProgram.patch_vertices)
|
||||
return false;
|
||||
break;
|
||||
default:
|
||||
|
|
@ -240,8 +244,8 @@ vbo_merge_draws(struct gl_context *ctx, bool in_dlist,
|
|||
}
|
||||
|
||||
/* Merge draws. */
|
||||
p0->count += p1->count;
|
||||
p0->end = p1->end;
|
||||
*count0 += count1;
|
||||
*end0 = end1;
|
||||
return true;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -875,7 +875,11 @@ try_vbo_merge(struct vbo_exec_context *exec)
|
|||
struct _mesa_prim *prev = &exec->vtx.prim[exec->vtx.prim_count - 2];
|
||||
assert(prev == cur - 1);
|
||||
|
||||
if (vbo_merge_draws(ctx, false, prev, cur))
|
||||
if (vbo_merge_draws(ctx, false,
|
||||
prev->mode, cur->mode, prev->start, cur->start,
|
||||
&prev->count, cur->count,
|
||||
prev->basevertex, cur->basevertex,
|
||||
&prev->end, cur->begin, cur->end))
|
||||
exec->vtx.prim_count--; /* drop the last primitive */
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -190,7 +190,11 @@ vbo_try_prim_conversion(GLubyte *mode, unsigned *count);
|
|||
|
||||
bool
|
||||
vbo_merge_draws(struct gl_context *ctx, bool in_dlist,
|
||||
struct _mesa_prim *p0, const struct _mesa_prim *p1);
|
||||
GLubyte mode0, GLubyte mode1,
|
||||
unsigned start0, unsigned start1,
|
||||
unsigned *count0, unsigned count1,
|
||||
unsigned basevertex0, unsigned basevertex1,
|
||||
bool *end0, bool begin1, bool end1);
|
||||
|
||||
unsigned
|
||||
vbo_copy_vertices(struct gl_context *ctx,
|
||||
|
|
|
|||
|
|
@ -298,7 +298,13 @@ merge_prims(struct gl_context *ctx, struct _mesa_prim *prim_list,
|
|||
|
||||
vbo_try_prim_conversion(&this_prim->mode, &this_prim->count);
|
||||
|
||||
if (vbo_merge_draws(ctx, true, prev_prim, this_prim)) {
|
||||
if (vbo_merge_draws(ctx, true,
|
||||
prev_prim->mode, this_prim->mode,
|
||||
prev_prim->start, this_prim->start,
|
||||
&prev_prim->count, this_prim->count,
|
||||
prev_prim->basevertex, this_prim->basevertex,
|
||||
&prev_prim->end,
|
||||
this_prim->begin, this_prim->end)) {
|
||||
/* We've found a prim that just extend the previous one. Tack it
|
||||
* onto the previous one, and let this primitive struct get dropped.
|
||||
*/
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue