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:
@@ -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);
|
||||
|
@@ -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)
|
||||
|
@@ -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);
|
||||
|
@@ -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);
|
||||
}
|
||||
|
@@ -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,
|
||||
|
Reference in New Issue
Block a user