zink: add a fastpath for nooping vertex and draw buffer barriers
even doing this mechanism inside the barrier function doesn't yield anywhere near the same gains (~15-20% in viewperf catia), mostly for the draw buffers, so I'd assume it's just added register pressure from the huge draw function Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/37277>
This commit is contained in:
committed by
Marge Bot
parent
efd8e46891
commit
26f4cc39b5
@@ -1414,9 +1414,11 @@ zink_set_vertex_buffers_internal(struct pipe_context *pctx,
|
||||
res->barrier_access[0] |= VK_ACCESS_VERTEX_ATTRIBUTE_READ_BIT;
|
||||
update_res_bind_count(ctx, res, false, false);
|
||||
ctx_vb->buffer_offset = vb->buffer_offset;
|
||||
/* 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);
|
||||
/* 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_batch_resource_usage_set(ctx->bs, res, false, true);
|
||||
res->obj->unordered_read = false;
|
||||
} else {
|
||||
|
||||
@@ -91,7 +91,9 @@ ALWAYS_INLINE static void
|
||||
check_buffer_barrier(struct zink_context *ctx, struct pipe_resource *pres, VkAccessFlags flags, VkPipelineStageFlags pipeline)
|
||||
{
|
||||
struct zink_resource *res = zink_resource(pres);
|
||||
zink_screen(ctx->base.screen)->buffer_barrier(ctx, res, flags, pipeline);
|
||||
/* fastpath for viewperf */
|
||||
if (res->obj->access != flags || res->obj->access_stage != pipeline)
|
||||
zink_screen(ctx->base.screen)->buffer_barrier(ctx, res, flags, pipeline);
|
||||
if (!ctx->unordered_blitting)
|
||||
res->obj->unordered_read = false;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user