mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2025-12-23 09:00:10 +01:00
zink: store last index buffer
this allows skipping some draw-time ops when the same index buffer is used repeatedly Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/37318>
This commit is contained in:
parent
03239662c3
commit
07a7d3627f
3 changed files with 12 additions and 3 deletions
|
|
@ -3726,6 +3726,7 @@ flush_batch(struct zink_context *ctx, bool sync)
|
|||
ctx->oom_stall = false;
|
||||
ctx->dd.bindless_bound = false;
|
||||
ctx->di.bindless_refs_dirty = true;
|
||||
ctx->index_buffer = NULL;
|
||||
ctx->sample_locations_changed = ctx->gfx_pipeline_state.sample_locations_enabled;
|
||||
if (zink_screen(ctx->base.screen)->info.dynamic_state2_feats.extendedDynamicState2PatchControlPoints) {
|
||||
VKCTX(CmdSetPatchControlPointsEXT)(ctx->bs->cmdbuf, ctx->gfx_pipeline_state.dyn_state2.vertices_per_patch);
|
||||
|
|
@ -5346,6 +5347,8 @@ zink_context_replace_buffer_storage(struct pipe_context *pctx, struct pipe_resou
|
|||
unsigned rebind_count = num_rebinds ? rebind_buffer(ctx, d, rebind_mask, num_rebinds) : 0;
|
||||
if (rebind_count != d->bind_count[0] + d->bind_count[1])
|
||||
ctx->buffer_rebind_counter = p_atomic_inc_return(&screen->buffer_rebind_counter);
|
||||
if (ctx->index_buffer == dst)
|
||||
ctx->index_buffer = NULL;
|
||||
}
|
||||
|
||||
static bool
|
||||
|
|
|
|||
|
|
@ -387,12 +387,15 @@ zink_draw(struct pipe_context *pctx,
|
|||
zink_batch_reference_resource_move(ctx, zink_resource(index_buffer));
|
||||
else
|
||||
zink_batch_reference_resource(ctx, zink_resource(index_buffer));
|
||||
} else {
|
||||
index_buffer = dinfo->index.resource;
|
||||
} else if (BATCH_CHANGED || ctx->index_buffer != dinfo->index.resource || ctx->index_size != dinfo->index_size) {
|
||||
ctx->index_buffer = index_buffer = dinfo->index.resource;
|
||||
ctx->index_size = dinfo->index_size;
|
||||
zink_batch_resource_usage_set(ctx->bs, zink_resource(index_buffer), false, true);
|
||||
}
|
||||
assert(index_size <= 4 && index_size != 3);
|
||||
assert(index_size != 1 || screen->info.have_EXT_index_type_uint8);
|
||||
} else {
|
||||
ctx->index_buffer = NULL;
|
||||
}
|
||||
|
||||
ctx->was_line_loop = dinfo->was_line_loop;
|
||||
|
|
@ -503,7 +506,7 @@ zink_draw(struct pipe_context *pctx,
|
|||
zink_set_primitive_emulation_keys(ctx);
|
||||
}
|
||||
|
||||
if (index_size) {
|
||||
if (index_buffer) {
|
||||
const VkIndexType index_type[3] = {
|
||||
VK_INDEX_TYPE_UINT8_EXT,
|
||||
VK_INDEX_TYPE_UINT16,
|
||||
|
|
|
|||
|
|
@ -1925,6 +1925,9 @@ struct zink_context {
|
|||
uint32_t ds3_states;
|
||||
unsigned work_count;
|
||||
|
||||
struct pipe_resource *index_buffer; //last index buffer
|
||||
unsigned index_size;
|
||||
|
||||
uint32_t num_so_targets;
|
||||
struct pipe_stream_output_target *so_targets[PIPE_MAX_SO_BUFFERS];
|
||||
bool dirty_so_targets;
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue