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