mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-09 04:38:03 +02:00
dlist: use a new OPCODE to avoid loading cold data
Also add a 'bool copy_to_current' param to vbo_save_playback_vertex_list: this way we can decide if we need to call playback_copy_to_current without loading any cold data. Reviewed-by: Marek Olšák <marek.olsak@amd.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/11493>
This commit is contained in:
parent
722e39c008
commit
764e28d238
5 changed files with 21 additions and 11 deletions
|
|
@ -628,6 +628,7 @@ typedef enum
|
|||
|
||||
OPCODE_VERTEX_LIST,
|
||||
OPCODE_VERTEX_LIST_LOOPBACK,
|
||||
OPCODE_VERTEX_LIST_COPY_CURRENT,
|
||||
|
||||
/* The following three are meta instructions */
|
||||
OPCODE_ERROR, /* raise compiled-in error */
|
||||
|
|
@ -822,7 +823,7 @@ vbo_print_vertex_list(struct gl_context *ctx, struct vbo_save_vertex_list *node,
|
|||
(void) ctx;
|
||||
|
||||
const char *label[] = {
|
||||
"VBO-VERTEX-LIST", "VBO-VERTEX-LIST-LOOPBACK"
|
||||
"VBO-VERTEX-LIST", "VBO-VERTEX-LIST-LOOPBACK", "VBO-VERTEX-LIST-COPY-CURRENT"
|
||||
};
|
||||
|
||||
fprintf(f, "%s, %u vertices, %d primitives, %d vertsize, "
|
||||
|
|
@ -1363,6 +1364,7 @@ _mesa_delete_list(struct gl_context *ctx, struct gl_display_list *dlist)
|
|||
break;
|
||||
case OPCODE_VERTEX_LIST:
|
||||
case OPCODE_VERTEX_LIST_LOOPBACK:
|
||||
case OPCODE_VERTEX_LIST_COPY_CURRENT:
|
||||
vbo_destroy_vertex_list(ctx, (struct vbo_save_vertex_list *) &n[1]);
|
||||
break;
|
||||
case OPCODE_CONTINUE:
|
||||
|
|
@ -1637,9 +1639,11 @@ _mesa_dlist_alloc_aligned(struct gl_context *ctx, GLuint opcode, GLuint bytes)
|
|||
|
||||
|
||||
void *
|
||||
_mesa_dlist_alloc_vertex_list(struct gl_context *ctx)
|
||||
_mesa_dlist_alloc_vertex_list(struct gl_context *ctx, bool copy_to_current)
|
||||
{
|
||||
return _mesa_dlist_alloc_aligned(ctx, OPCODE_VERTEX_LIST,
|
||||
return _mesa_dlist_alloc_aligned(ctx,
|
||||
copy_to_current ? OPCODE_VERTEX_LIST_COPY_CURRENT :
|
||||
OPCODE_VERTEX_LIST,
|
||||
sizeof(struct vbo_save_vertex_list));
|
||||
}
|
||||
|
||||
|
|
@ -13412,7 +13416,11 @@ execute_list(struct gl_context *ctx, GLuint list)
|
|||
break;
|
||||
|
||||
case OPCODE_VERTEX_LIST:
|
||||
vbo_save_playback_vertex_list(ctx, &n[1]);
|
||||
vbo_save_playback_vertex_list(ctx, &n[1], false);
|
||||
break;
|
||||
|
||||
case OPCODE_VERTEX_LIST_COPY_CURRENT:
|
||||
vbo_save_playback_vertex_list(ctx, &n[1], true);
|
||||
break;
|
||||
|
||||
case OPCODE_VERTEX_LIST_LOOPBACK:
|
||||
|
|
@ -13620,6 +13628,7 @@ replace_op_vertex_list_recursively(struct gl_context *ctx, struct gl_display_lis
|
|||
const OpCode opcode = n[0].opcode;
|
||||
switch (opcode) {
|
||||
case OPCODE_VERTEX_LIST:
|
||||
case OPCODE_VERTEX_LIST_COPY_CURRENT:
|
||||
n[0].opcode = OPCODE_VERTEX_LIST_LOOPBACK;
|
||||
break;
|
||||
case OPCODE_CONTINUE:
|
||||
|
|
@ -14956,6 +14965,7 @@ print_list(struct gl_context *ctx, GLuint list, const char *fname)
|
|||
break;
|
||||
case OPCODE_VERTEX_LIST:
|
||||
case OPCODE_VERTEX_LIST_LOOPBACK:
|
||||
case OPCODE_VERTEX_LIST_COPY_CURRENT:
|
||||
vbo_print_vertex_list(ctx, (struct vbo_save_vertex_list *) &n[1], opcode, f);
|
||||
break;
|
||||
default:
|
||||
|
|
|
|||
|
|
@ -112,7 +112,8 @@ void *
|
|||
_mesa_dlist_alloc_aligned(struct gl_context *ctx, GLuint opcode, GLuint bytes);
|
||||
|
||||
void *
|
||||
_mesa_dlist_alloc_vertex_list(struct gl_context *ctx);
|
||||
_mesa_dlist_alloc_vertex_list(struct gl_context *ctx,
|
||||
bool copy_to_current);
|
||||
|
||||
void
|
||||
_mesa_delete_list(struct gl_context *ctx, struct gl_display_list *dlist);
|
||||
|
|
|
|||
|
|
@ -175,7 +175,7 @@ void _vbo_loopback_vertex_list(struct gl_context *ctx,
|
|||
/* Callbacks:
|
||||
*/
|
||||
void
|
||||
vbo_save_playback_vertex_list(struct gl_context *ctx, void *data);
|
||||
vbo_save_playback_vertex_list(struct gl_context *ctx, void *data, bool copy_to_current);
|
||||
|
||||
void
|
||||
vbo_save_playback_vertex_list_loopback(struct gl_context *ctx, void *data);
|
||||
|
|
|
|||
|
|
@ -525,7 +525,7 @@ compile_vertex_list(struct gl_context *ctx)
|
|||
* being compiled.
|
||||
*/
|
||||
node = (struct vbo_save_vertex_list *)
|
||||
_mesa_dlist_alloc_vertex_list(ctx);
|
||||
_mesa_dlist_alloc_vertex_list(ctx, !save->dangling_attr_ref && !save->no_current_update);
|
||||
|
||||
if (!node)
|
||||
return;
|
||||
|
|
|
|||
|
|
@ -205,7 +205,7 @@ end:
|
|||
* a drawing command.
|
||||
*/
|
||||
void
|
||||
vbo_save_playback_vertex_list(struct gl_context *ctx, void *data)
|
||||
vbo_save_playback_vertex_list(struct gl_context *ctx, void *data, bool copy_to_current)
|
||||
{
|
||||
const struct vbo_save_vertex_list *node =
|
||||
(const struct vbo_save_vertex_list *) data;
|
||||
|
|
@ -253,7 +253,6 @@ vbo_save_playback_vertex_list(struct gl_context *ctx, void *data)
|
|||
}
|
||||
info->index.gl_bo = gl_bo;
|
||||
|
||||
/* Copy to current?
|
||||
*/
|
||||
playback_copy_to_current(ctx, node);
|
||||
if (copy_to_current)
|
||||
playback_copy_to_current(ctx, node);
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue