diff --git a/src/gallium/drivers/zink/zink_draw.cpp b/src/gallium/drivers/zink/zink_draw.cpp index 5c7046de5da..0a002fcc398 100644 --- a/src/gallium/drivers/zink/zink_draw.cpp +++ b/src/gallium/drivers/zink/zink_draw.cpp @@ -605,9 +605,9 @@ zink_draw(struct pipe_context *pctx, VKCTX(CmdBindIndexBuffer)(batch->state->cmdbuf, res->obj->buffer, index_offset, index_type[index_size >> 1]); } if (DYNAMIC_STATE < ZINK_DYNAMIC_STATE2) { - if (ctx->gfx_pipeline_state.primitive_restart != dinfo->primitive_restart) + if (ctx->gfx_pipeline_state.dyn_state2.primitive_restart != dinfo->primitive_restart) ctx->gfx_pipeline_state.dirty = true; - ctx->gfx_pipeline_state.primitive_restart = dinfo->primitive_restart; + ctx->gfx_pipeline_state.dyn_state2.primitive_restart = dinfo->primitive_restart; } if (have_streamout && ctx->dirty_so_targets) diff --git a/src/gallium/drivers/zink/zink_pipeline.c b/src/gallium/drivers/zink/zink_pipeline.c index 728b387f6ad..791a39ed473 100644 --- a/src/gallium/drivers/zink/zink_pipeline.c +++ b/src/gallium/drivers/zink/zink_pipeline.c @@ -90,12 +90,12 @@ zink_create_gfx_pipeline(struct zink_screen *screen, case VK_PRIMITIVE_TOPOLOGY_LINE_LIST_WITH_ADJACENCY: case VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST_WITH_ADJACENCY: case VK_PRIMITIVE_TOPOLOGY_PATCH_LIST: - if (state->primitive_restart) + if (state->dyn_state2.primitive_restart) debug_printf("restart_index set with unsupported primitive topology %u\n", primitive_topology); primitive_state.primitiveRestartEnable = VK_FALSE; break; default: - primitive_state.primitiveRestartEnable = state->primitive_restart ? VK_TRUE : VK_FALSE; + primitive_state.primitiveRestartEnable = state->dyn_state2.primitive_restart ? VK_TRUE : VK_FALSE; } } diff --git a/src/gallium/drivers/zink/zink_pipeline.h b/src/gallium/drivers/zink/zink_pipeline.h index 80c851c5ca8..76bfcf62f0c 100644 --- a/src/gallium/drivers/zink/zink_pipeline.h +++ b/src/gallium/drivers/zink/zink_pipeline.h @@ -60,7 +60,9 @@ struct zink_gfx_pipeline_state { unsigned num_viewports; } dyn_state1; - bool primitive_restart; //dynamic state2 + struct { + bool primitive_restart; + } dyn_state2; VkShaderModule modules[PIPE_SHADER_TYPES - 1]; bool modules_changed; diff --git a/src/gallium/drivers/zink/zink_program.c b/src/gallium/drivers/zink/zink_program.c index db6b1784974..6dd9f8de676 100644 --- a/src/gallium/drivers/zink/zink_program.c +++ b/src/gallium/drivers/zink/zink_program.c @@ -213,7 +213,7 @@ hash_gfx_pipeline_state(const void *key) const struct zink_gfx_pipeline_state *state = key; uint32_t hash = _mesa_hash_data(key, offsetof(struct zink_gfx_pipeline_state, hash)); if (!state->have_EXT_extended_dynamic_state2) - hash = XXH32(&state->primitive_restart, 1, hash); + hash = XXH32(&state->dyn_state2, sizeof(state->dyn_state2), hash); if (state->have_EXT_extended_dynamic_state) return hash; return XXH32(&state->dyn_state1, sizeof(state->dyn_state1), hash); @@ -245,7 +245,7 @@ equals_gfx_pipeline_state(const void *a, const void *b) return false; } if (!sa->have_EXT_extended_dynamic_state2) { - if (sa->primitive_restart != sb->primitive_restart) + if (sa->dyn_state2.primitive_restart != sb->dyn_state2.primitive_restart) return false; } return !memcmp(sa->modules, sb->modules, sizeof(sa->modules)) &&