zink: move binding_map to hw_state part of vertex state
authorMike Blumenkrantz <michael.blumenkrantz@gmail.com>
Fri, 23 Sep 2022 16:11:35 +0000 (12:11 -0400)
committerMarge Bot <emma+marge@anholt.net>
Sat, 1 Oct 2022 02:18:39 +0000 (02:18 +0000)
this is used when dynamic states aren't used

Reviewed-by: Adam Jackson <ajax@redhat.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/18911>

src/gallium/drivers/zink/zink_draw.cpp
src/gallium/drivers/zink/zink_program_state.hpp
src/gallium/drivers/zink/zink_state.c
src/gallium/drivers/zink/zink_types.h

index fad7673..1ada2ad 100644 (file)
@@ -117,7 +117,7 @@ zink_bind_vertex_buffers(struct zink_batch *batch, struct zink_context *ctx)
    struct zink_screen *screen = zink_screen(ctx->base.screen);
 
    for (unsigned i = 0; i < elems->hw_state.num_bindings; i++) {
-      struct pipe_vertex_buffer *vb = ctx->vertex_buffers + ctx->element_state->binding_map[i];
+      struct pipe_vertex_buffer *vb = ctx->vertex_buffers + ctx->element_state->hw_state.binding_map[i];
       assert(vb);
       if (vb->buffer.resource) {
          struct zink_resource *res = zink_resource(vb->buffer.resource);
index f736406..4347b8c 100644 (file)
@@ -68,7 +68,7 @@ find_or_create_input_dynamic(struct zink_context *ctx, VkPrimitiveTopology vkmod
    if (!he) {
       struct zink_gfx_input_key *ikey = rzalloc(ctx, struct zink_gfx_input_key);
       ikey->idx = ctx->gfx_pipeline_state.idx;
-      ikey->pipeline = zink_create_gfx_pipeline_input(zink_screen(ctx->base.screen), &ctx->gfx_pipeline_state, ctx->element_state->binding_map, vkmode);
+      ikey->pipeline = zink_create_gfx_pipeline_input(zink_screen(ctx->base.screen), &ctx->gfx_pipeline_state, NULL, vkmode);
       he = _mesa_set_add_pre_hashed(&ctx->gfx_inputs, hash, ikey);
    }
    return (struct zink_gfx_input_key *)he->key;
@@ -87,7 +87,7 @@ find_or_create_input(struct zink_context *ctx, VkPrimitiveTopology vkmode)
       } else {
          memcpy(ikey, &ctx->gfx_pipeline_state.input, offsetof(struct zink_gfx_input_key, pipeline));
       }
-      ikey->pipeline = zink_create_gfx_pipeline_input(zink_screen(ctx->base.screen), &ctx->gfx_pipeline_state, ctx->element_state->binding_map, vkmode);
+      ikey->pipeline = zink_create_gfx_pipeline_input(zink_screen(ctx->base.screen), &ctx->gfx_pipeline_state, ikey->element_state->binding_map, vkmode);
       he = _mesa_set_add_pre_hashed(&ctx->gfx_inputs, hash, ikey);
    }
    return (struct zink_gfx_input_key*)he->key;
@@ -136,7 +136,7 @@ check_vertex_strides(struct zink_context *ctx)
 {
    const struct zink_vertex_elements_state *ves = ctx->element_state;
    for (unsigned i = 0; i < ves->hw_state.num_bindings; i++) {
-      const struct pipe_vertex_buffer *vb = ctx->vertex_buffers + ves->binding_map[i];
+      const struct pipe_vertex_buffer *vb = ctx->vertex_buffers + ves->hw_state.binding_map[i];
       unsigned stride = vb->buffer.resource ? vb->stride : 0;
       if (stride && stride < ves->min_stride[i])
          return false;
@@ -190,7 +190,7 @@ zink_get_gfx_pipeline(struct zink_context *ctx,
          hash = XXH32(&vertex_buffers_enabled_mask, sizeof(uint32_t), hash);
 
          for (unsigned i = 0; i < state->element_state->num_bindings; i++) {
-            const unsigned buffer_id = ctx->element_state->binding_map[i];
+            const unsigned buffer_id = ctx->element_state->hw_state.binding_map[i];
             struct pipe_vertex_buffer *vb = ctx->vertex_buffers + buffer_id;
             state->vertex_strides[buffer_id] = vb->buffer.resource ? vb->stride : 0;
             hash = XXH32(&state->vertex_strides[buffer_id], sizeof(uint32_t), hash);
@@ -247,7 +247,7 @@ zink_get_gfx_pipeline(struct zink_context *ctx,
          pc_entry->okey = okey;
          pipeline = zink_create_gfx_pipeline_combined(screen, prog, ikey->pipeline, gkey->pipeline, okey->pipeline, true);
       } else {
-         pipeline = zink_create_gfx_pipeline(screen, prog, state, ctx->element_state->binding_map, vkmode);
+         pipeline = zink_create_gfx_pipeline(screen, prog, state, state->element_state->binding_map, vkmode);
       }
       if (pipeline == VK_NULL_HANDLE)
          return VK_NULL_HANDLE;
index db5c17f..f3e757e 100644 (file)
@@ -62,7 +62,7 @@ zink_create_vertex_elements_state(struct pipe_context *pctx,
 
       int binding = elem->vertex_buffer_index;
       if (buffer_map[binding] < 0) {
-         ves->binding_map[num_bindings] = binding;
+         ves->hw_state.binding_map[num_bindings] = binding;
          buffer_map[binding] = num_bindings++;
       }
       binding = buffer_map[binding];
index 7283c4e..cee6576 100644 (file)
@@ -227,6 +227,7 @@ struct zink_vertex_elements_hw_state {
       } b;
       VkVertexInputBindingDescription2EXT dynbindings[PIPE_MAX_ATTRIBS];
    };
+   uint8_t binding_map[PIPE_MAX_ATTRIBS];
 };
 
 struct zink_vertex_elements_state {
@@ -236,7 +237,6 @@ struct zink_vertex_elements_state {
       VkVertexInputRate inputRate;
    } bindings[PIPE_MAX_ATTRIBS];
    uint32_t divisor[PIPE_MAX_ATTRIBS];
-   uint8_t binding_map[PIPE_MAX_ATTRIBS];
    uint32_t min_stride[PIPE_MAX_ATTRIBS]; //for dynamic_state1
    uint32_t decomposed_attrs;
    unsigned decomposed_attrs_size;