mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-05 13:58:04 +02:00
zink: deduplicate some program creation code
Reviewed-by: Samuel Pitoiset <samuel.pitoiset@gmail.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/18135>
This commit is contained in:
parent
67808a69c6
commit
fc429a8538
1 changed files with 15 additions and 9 deletions
|
|
@ -463,6 +463,19 @@ zink_pipeline_layout_create(struct zink_screen *screen, struct zink_program *pg,
|
|||
return layout;
|
||||
}
|
||||
|
||||
static void *
|
||||
create_program(struct zink_context *ctx, bool is_compute)
|
||||
{
|
||||
struct zink_program *pg = rzalloc_size(NULL, is_compute ? sizeof(struct zink_compute_program) : sizeof(struct zink_gfx_program));
|
||||
if (!pg)
|
||||
return NULL;
|
||||
|
||||
pipe_reference_init(&pg->reference, 1);
|
||||
util_queue_fence_init(&pg->cache_fence);
|
||||
pg->is_compute = is_compute;
|
||||
return (void*)pg;
|
||||
}
|
||||
|
||||
static void
|
||||
assign_io(struct zink_gfx_program *prog, struct zink_shader *stages[ZINK_GFX_SHADER_COUNT])
|
||||
{
|
||||
|
|
@ -495,13 +508,10 @@ zink_create_gfx_program(struct zink_context *ctx,
|
|||
unsigned vertices_per_patch)
|
||||
{
|
||||
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 = create_program(ctx, false);
|
||||
if (!prog)
|
||||
goto fail;
|
||||
|
||||
pipe_reference_init(&prog->base.reference, 1);
|
||||
util_queue_fence_init(&prog->base.cache_fence);
|
||||
|
||||
for (int i = 0; i < ZINK_GFX_SHADER_COUNT; ++i) {
|
||||
list_inithead(&prog->shader_cache[i][0][0]);
|
||||
list_inithead(&prog->shader_cache[i][0][1]);
|
||||
|
|
@ -610,14 +620,10 @@ struct zink_compute_program *
|
|||
zink_create_compute_program(struct zink_context *ctx, struct zink_shader *shader)
|
||||
{
|
||||
struct zink_screen *screen = zink_screen(ctx->base.screen);
|
||||
struct zink_compute_program *comp = rzalloc(NULL, struct zink_compute_program);
|
||||
struct zink_compute_program *comp = create_program(ctx, true);
|
||||
if (!comp)
|
||||
goto fail;
|
||||
|
||||
pipe_reference_init(&comp->base.reference, 1);
|
||||
util_queue_fence_init(&comp->base.cache_fence);
|
||||
comp->base.is_compute = true;
|
||||
|
||||
comp->curr = comp->module = CALLOC_STRUCT(zink_shader_module);
|
||||
assert(comp->module);
|
||||
comp->module->shader = zink_shader_compile(screen, shader, shader->nir, NULL);
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue