mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2025-12-25 00:00:11 +01:00
zink: eliminate even more calls to sync functions
many times (especially in viewperf), vertex buffers and draw buffers have no prior access, which means incurring a heavy call to the barrier function which will just return a no-op anyway instead, have an inline helper to no-op these cases and just add the expected access Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/37277>
This commit is contained in:
parent
58ed06ad68
commit
d63374498d
3 changed files with 13 additions and 3 deletions
|
|
@ -1498,8 +1498,7 @@ zink_set_vertex_buffers_internal(struct pipe_context *pctx,
|
|||
/* fastpath for viewperf */
|
||||
if (res->obj->access != VK_ACCESS_VERTEX_ATTRIBUTE_READ_BIT || res->obj->access_stage != VK_PIPELINE_STAGE_VERTEX_INPUT_BIT)
|
||||
/* always barrier before possible rebind */
|
||||
zink_screen(ctx->base.screen)->buffer_barrier(ctx, res, VK_ACCESS_VERTEX_ATTRIBUTE_READ_BIT,
|
||||
VK_PIPELINE_STAGE_VERTEX_INPUT_BIT);
|
||||
zink_buffer_barrier(ctx, res, VK_ACCESS_VERTEX_ATTRIBUTE_READ_BIT, VK_PIPELINE_STAGE_VERTEX_INPUT_BIT);
|
||||
zink_batch_resource_usage_set(ctx->bs, res, false, true);
|
||||
res->obj->unordered_read = false;
|
||||
} else {
|
||||
|
|
|
|||
|
|
@ -132,6 +132,17 @@ zink_update_fbfetch(struct zink_context *ctx);
|
|||
bool
|
||||
zink_resource_access_is_write(VkAccessFlags flags);
|
||||
|
||||
static ALWAYS_INLINE void
|
||||
zink_buffer_barrier(struct zink_context *ctx, struct zink_resource *res, VkAccessFlags flags, VkPipelineStageFlags pipeline)
|
||||
{
|
||||
if (res->obj->access) {
|
||||
zink_screen(ctx->base.screen)->buffer_barrier(ctx, res, flags, pipeline);
|
||||
} else {
|
||||
res->obj->access = res->obj->unordered_access = flags;
|
||||
res->obj->access_stage = res->obj->unordered_access_stage = pipeline;
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
zink_resource_image_barrier_init(VkImageMemoryBarrier *imb, struct zink_resource *res, VkImageLayout new_layout, VkAccessFlags flags, VkPipelineStageFlags pipeline);
|
||||
void
|
||||
|
|
|
|||
|
|
@ -93,7 +93,7 @@ check_buffer_barrier(struct zink_context *ctx, struct pipe_resource *pres, VkAcc
|
|||
struct zink_resource *res = zink_resource(pres);
|
||||
/* fastpath for viewperf */
|
||||
if (res->obj->access != flags || res->obj->access_stage != pipeline)
|
||||
zink_screen(ctx->base.screen)->buffer_barrier(ctx, res, flags, pipeline);
|
||||
zink_buffer_barrier(ctx, res, flags, pipeline);
|
||||
if (!ctx->unordered_blitting)
|
||||
res->obj->unordered_read = false;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue