zink: make tcs shader generation take screen param

Reviewed-by: Dave Airlie <airlied@redhat.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/12842>
This commit is contained in:
Mike Blumenkrantz
2021-09-01 13:56:02 -04:00
parent da10f13de9
commit ab4d8ed1e9
5 changed files with 9 additions and 8 deletions

View File

@@ -1279,15 +1279,14 @@ void main()
*/
struct zink_shader *
zink_shader_tcs_create(struct zink_context *ctx, struct zink_shader *vs)
zink_shader_tcs_create(struct zink_screen *screen, struct zink_shader *vs, unsigned vertices_per_patch)
{
unsigned vertices_per_patch = ctx->gfx_pipeline_state.vertices_per_patch + 1;
struct zink_shader *ret = CALLOC_STRUCT(zink_shader);
ret->hash = _mesa_hash_pointer(ret);
ret->programs = _mesa_pointer_set_create(NULL);
simple_mtx_init(&ret->lock, mtx_plain);
nir_shader *nir = nir_shader_create(NULL, MESA_SHADER_TESS_CTRL, &zink_screen(ctx->base.screen)->nir_options, NULL);
nir_shader *nir = nir_shader_create(NULL, MESA_SHADER_TESS_CTRL, &screen->nir_options, NULL);
nir_function *fn = nir_function_create(nir, "main");
fn->is_entrypoint = true;
nir_function_impl *impl = nir_function_impl_create(fn);

View File

@@ -112,7 +112,7 @@ void
zink_shader_free(struct zink_context *ctx, struct zink_shader *shader);
struct zink_shader *
zink_shader_tcs_create(struct zink_context *ctx, struct zink_shader *vs);
zink_shader_tcs_create(struct zink_screen *screen, struct zink_shader *vs, unsigned vertices_per_patch);
static inline bool
zink_shader_descriptor_is_buffer(struct zink_shader *zs, enum zink_descriptor_type type, unsigned i)

View File

@@ -198,7 +198,7 @@ update_gfx_program(struct zink_context *ctx)
ctx->gfx_pipeline_state.modules[stage] = prog->modules[stage]->shader;
zink_update_gfx_program(ctx, prog);
} else {
prog = zink_create_gfx_program(ctx, ctx->gfx_stages);
prog = zink_create_gfx_program(ctx, ctx->gfx_stages, ctx->gfx_pipeline_state.vertices_per_patch + 1);
entry = _mesa_hash_table_insert_pre_hashed(ht, hash, prog->shaders, prog);
}
prog = (struct zink_gfx_program*)(entry ? entry->data : NULL);

View File

@@ -450,7 +450,8 @@ assign_io(struct zink_gfx_program *prog, struct zink_shader *stages[ZINK_SHADER_
struct zink_gfx_program *
zink_create_gfx_program(struct zink_context *ctx,
struct zink_shader *stages[ZINK_SHADER_COUNT])
struct zink_shader *stages[ZINK_SHADER_COUNT],
unsigned vertices_per_patch)
{
struct zink_screen *screen = zink_screen(ctx->base.screen);
struct zink_gfx_program *prog = rzalloc(NULL, struct zink_gfx_program);
@@ -469,7 +470,7 @@ zink_create_gfx_program(struct zink_context *ctx,
if (stages[PIPE_SHADER_TESS_EVAL] && !stages[PIPE_SHADER_TESS_CTRL]) {
prog->shaders[PIPE_SHADER_TESS_EVAL]->generated =
prog->shaders[PIPE_SHADER_TESS_CTRL] =
zink_shader_tcs_create(ctx, stages[PIPE_SHADER_VERTEX]);
zink_shader_tcs_create(screen, stages[PIPE_SHADER_VERTEX], vertices_per_patch);
_mesa_hash_table_init(&prog->base.shader_cache[PIPE_SHADER_TESS_CTRL], prog, keybox_hash, keybox_equals);
prog->stages_present |= BITFIELD_BIT(PIPE_SHADER_TESS_CTRL);
}

View File

@@ -197,7 +197,8 @@ zink_update_gfx_program(struct zink_context *ctx, struct zink_gfx_program *prog)
struct zink_gfx_program *
zink_create_gfx_program(struct zink_context *ctx,
struct zink_shader *stages[ZINK_SHADER_COUNT]);
struct zink_shader *stages[ZINK_SHADER_COUNT],
unsigned vertices_per_patch);
void
zink_destroy_gfx_program(struct zink_screen *screen,