From: Mike Blumenkrantz Date: Fri, 23 Sep 2022 16:11:35 +0000 (-0400) Subject: zink: move binding_map to hw_state part of vertex state X-Git-Tag: upstream/22.3.5~2052 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=f63944f694d17681a481711c4acd17dadd7af71f;p=platform%2Fupstream%2Fmesa.git zink: move binding_map to hw_state part of vertex state this is used when dynamic states aren't used Reviewed-by: Adam Jackson Part-of: --- diff --git a/src/gallium/drivers/zink/zink_draw.cpp b/src/gallium/drivers/zink/zink_draw.cpp index fad7673..1ada2ad 100644 --- a/src/gallium/drivers/zink/zink_draw.cpp +++ b/src/gallium/drivers/zink/zink_draw.cpp @@ -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); diff --git a/src/gallium/drivers/zink/zink_program_state.hpp b/src/gallium/drivers/zink/zink_program_state.hpp index f736406..4347b8c 100644 --- a/src/gallium/drivers/zink/zink_program_state.hpp +++ b/src/gallium/drivers/zink/zink_program_state.hpp @@ -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; diff --git a/src/gallium/drivers/zink/zink_state.c b/src/gallium/drivers/zink/zink_state.c index db5c17f..f3e757e 100644 --- a/src/gallium/drivers/zink/zink_state.c +++ b/src/gallium/drivers/zink/zink_state.c @@ -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]; diff --git a/src/gallium/drivers/zink/zink_types.h b/src/gallium/drivers/zink/zink_types.h index 7283c4e..cee6576 100644 --- a/src/gallium/drivers/zink/zink_types.h +++ b/src/gallium/drivers/zink/zink_types.h @@ -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;