diff --git a/src/gallium/drivers/zink/zink_descriptors.c b/src/gallium/drivers/zink/zink_descriptors.c index f7184336928..b45034490bd 100644 --- a/src/gallium/drivers/zink/zink_descriptors.c +++ b/src/gallium/drivers/zink/zink_descriptors.c @@ -402,7 +402,6 @@ zink_descriptor_program_init(struct zink_context *ctx, struct zink_program *pg) stages = ((struct zink_gfx_program*)pg)->shaders; if (!pg->is_compute && stages[MESA_SHADER_FRAGMENT]->nir->info.fs.uses_fbfetch_output) { - zink_descriptor_util_init_fbfetch(ctx); push_count = 1; pg->dd.fbfetch = true; } @@ -452,8 +451,6 @@ zink_descriptor_program_init(struct zink_context *ctx, struct zink_program *pg) } pg->dd.bindless |= shader->bindless; } - if (pg->dd.bindless) - zink_descriptors_init_bindless(ctx); pg->dd.binding_usage = has_bindings; if (!has_bindings && !push_count && !pg->dd.bindless) { pg->layout = zink_pipeline_layout_create(screen, pg, &pg->compat_id); diff --git a/src/gallium/drivers/zink/zink_program.c b/src/gallium/drivers/zink/zink_program.c index 5ec6c90033a..39e51998d80 100644 --- a/src/gallium/drivers/zink/zink_program.c +++ b/src/gallium/drivers/zink/zink_program.c @@ -1213,6 +1213,9 @@ zink_create_cs_state(struct pipe_context *pctx, else nir = (struct nir_shader *)shader->prog; + if (nir->info.uses_bindless) + zink_descriptors_init_bindless(zink_context(pctx)); + return create_compute_program(zink_context(pctx), nir); } @@ -1267,6 +1270,11 @@ zink_create_gfx_shader_state(struct pipe_context *pctx, const struct pipe_shader else nir = (struct nir_shader *)shader->ir.nir; + if (nir->info.stage == MESA_SHADER_FRAGMENT && nir->info.fs.uses_fbfetch_output) + zink_descriptor_util_init_fbfetch(zink_context(pctx)); + if (nir->info.uses_bindless) + zink_descriptors_init_bindless(zink_context(pctx)); + return zink_shader_create(zink_screen(pctx->screen), nir, &shader->stream_output); }