zink: break out descriptor binding into separate function

Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/21085>
This commit is contained in:
Mike Blumenkrantz 2023-02-02 17:08:35 -05:00 committed by Marge Bot
parent 362b8792e7
commit f81a4e904c
2 changed files with 21 additions and 13 deletions

View file

@ -407,11 +407,26 @@ zink_reset_batch(struct zink_context *ctx, struct zink_batch *batch)
batch->has_work = false; batch->has_work = false;
} }
void
zink_batch_bind_db(struct zink_context *ctx)
{
struct zink_screen *screen = zink_screen(ctx->base.screen);
struct zink_batch *batch = &ctx->batch;
unsigned count = screen->compact_descriptors ? 3 : 5;
VkDescriptorBufferBindingInfoEXT infos[ZINK_DESCRIPTOR_NON_BINDLESS_TYPES] = {0};
for (unsigned i = 0; i < count; i++) {
infos[i].sType = VK_STRUCTURE_TYPE_DESCRIPTOR_BUFFER_BINDING_INFO_EXT;
infos[i].address = batch->state->dd.db[i]->obj->bda;
infos[i].usage = batch->state->dd.db[i]->obj->vkusage;
assert(infos[i].usage);
}
VKSCR(CmdBindDescriptorBuffersEXT)(batch->state->cmdbuf, count, infos);
}
/* called on context creation and after flushing an old batch */ /* called on context creation and after flushing an old batch */
void void
zink_start_batch(struct zink_context *ctx, struct zink_batch *batch) zink_start_batch(struct zink_context *ctx, struct zink_batch *batch)
{ {
struct zink_screen *screen = zink_screen(ctx->base.screen);
zink_reset_batch(ctx, batch); zink_reset_batch(ctx, batch);
batch->state->usage.unflushed = true; batch->state->usage.unflushed = true;
@ -435,6 +450,7 @@ zink_start_batch(struct zink_context *ctx, struct zink_batch *batch)
} }
#ifdef HAVE_RENDERDOC_APP_H #ifdef HAVE_RENDERDOC_APP_H
struct zink_screen *screen = zink_screen(ctx->base.screen);
if (VKCTX(CmdInsertDebugUtilsLabelEXT) && screen->renderdoc_api) { if (VKCTX(CmdInsertDebugUtilsLabelEXT) && screen->renderdoc_api) {
VkDebugUtilsLabelEXT capture_label; VkDebugUtilsLabelEXT capture_label;
/* Magic fallback which lets us bridge the Wine barrier over to Linux RenderDoc. */ /* Magic fallback which lets us bridge the Wine barrier over to Linux RenderDoc. */
@ -458,17 +474,8 @@ zink_start_batch(struct zink_context *ctx, struct zink_batch *batch)
zink_resume_queries(ctx, batch); zink_resume_queries(ctx, batch);
/* descriptor buffers must always be bound at the start of a batch */ /* descriptor buffers must always be bound at the start of a batch */
if (zink_descriptor_mode == ZINK_DESCRIPTOR_MODE_DB && !(ctx->flags & ZINK_CONTEXT_COPY_ONLY)) { if (zink_descriptor_mode == ZINK_DESCRIPTOR_MODE_DB && !(ctx->flags & ZINK_CONTEXT_COPY_ONLY))
unsigned count = screen->compact_descriptors ? 3 : 5; zink_batch_bind_db(ctx);
VkDescriptorBufferBindingInfoEXT infos[ZINK_DESCRIPTOR_NON_BINDLESS_TYPES] = {0};
for (unsigned i = 0; i < count; i++) {
infos[i].sType = VK_STRUCTURE_TYPE_DESCRIPTOR_BUFFER_BINDING_INFO_EXT;
infos[i].address = batch->state->dd.db[i]->obj->bda;
infos[i].usage = batch->state->dd.db[i]->obj->vkusage;
assert(infos[i].usage);
}
VKSCR(CmdBindDescriptorBuffersEXT)(batch->state->cmdbuf, count, infos);
}
} }
/* common operations to run post submit; split out for clarity */ /* common operations to run post submit; split out for clarity */

View file

@ -78,7 +78,8 @@ void
zink_batch_reference_program(struct zink_batch *batch, zink_batch_reference_program(struct zink_batch *batch,
struct zink_program *pg); struct zink_program *pg);
void
zink_batch_bind_db(struct zink_context *ctx);
void void
debug_describe_zink_batch_state(char *buf, const struct zink_batch_state *ptr); debug_describe_zink_batch_state(char *buf, const struct zink_batch_state *ptr);