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 * 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); struct zink_shader *ret = CALLOC_STRUCT(zink_shader);
ret->hash = _mesa_hash_pointer(ret); ret->hash = _mesa_hash_pointer(ret);
ret->programs = _mesa_pointer_set_create(NULL); ret->programs = _mesa_pointer_set_create(NULL);
simple_mtx_init(&ret->lock, mtx_plain); 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"); nir_function *fn = nir_function_create(nir, "main");
fn->is_entrypoint = true; fn->is_entrypoint = true;
nir_function_impl *impl = nir_function_impl_create(fn); 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); zink_shader_free(struct zink_context *ctx, struct zink_shader *shader);
struct zink_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 static inline bool
zink_shader_descriptor_is_buffer(struct zink_shader *zs, enum zink_descriptor_type type, unsigned i) 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; ctx->gfx_pipeline_state.modules[stage] = prog->modules[stage]->shader;
zink_update_gfx_program(ctx, prog); zink_update_gfx_program(ctx, prog);
} else { } 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); entry = _mesa_hash_table_insert_pre_hashed(ht, hash, prog->shaders, prog);
} }
prog = (struct zink_gfx_program*)(entry ? entry->data : NULL); 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 * struct zink_gfx_program *
zink_create_gfx_program(struct zink_context *ctx, 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_screen *screen = zink_screen(ctx->base.screen);
struct zink_gfx_program *prog = rzalloc(NULL, struct zink_gfx_program); 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]) { if (stages[PIPE_SHADER_TESS_EVAL] && !stages[PIPE_SHADER_TESS_CTRL]) {
prog->shaders[PIPE_SHADER_TESS_EVAL]->generated = prog->shaders[PIPE_SHADER_TESS_EVAL]->generated =
prog->shaders[PIPE_SHADER_TESS_CTRL] = 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); _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); 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 * struct zink_gfx_program *
zink_create_gfx_program(struct zink_context *ctx, 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 void
zink_destroy_gfx_program(struct zink_screen *screen, zink_destroy_gfx_program(struct zink_screen *screen,