static struct zink_gfx_program *
get_gfx_program(struct zink_context *ctx)
{
- if (ctx->dirty_program) {
+ if (ctx->dirty_shader_stages) {
struct hash_entry *entry = _mesa_hash_table_search(ctx->program_cache,
ctx->gfx_stages);
if (!entry) {
struct zink_gfx_program *prog;
prog = zink_create_gfx_program(ctx, ctx->gfx_stages);
- entry = _mesa_hash_table_insert(ctx->program_cache, prog->stages, prog);
+ entry = _mesa_hash_table_insert(ctx->program_cache, prog->shaders, prog);
if (!entry)
return NULL;
}
ctx->curr_program = entry->data;
- ctx->dirty_program = false;
+ ctx->dirty_shader_stages = 0;
}
assert(ctx->curr_program);
if (!gfx_program)
return;
+ if (ctx->gfx_pipeline_state.primitive_restart != !!dinfo->primitive_restart)
+ ctx->gfx_pipeline_state.hash = 0;
ctx->gfx_pipeline_state.primitive_restart = !!dinfo->primitive_restart;
VkPipeline pipeline = zink_get_gfx_pipeline(screen, gfx_program,