Mesa (master): zink: add handling for tcs and tes shader states
GitLab Mirror
gitlab-mirror at kemper.freedesktop.org
Tue Dec 22 13:56:10 UTC 2020
Module: Mesa
Branch: master
Commit: 5b2c397c54f7690a7ddb3c8bf18e4cb088dbd504
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=5b2c397c54f7690a7ddb3c8bf18e4cb088dbd504
Author: Mike Blumenkrantz <michael.blumenkrantz at gmail.com>
Date: Thu Dec 17 21:29:08 2020 -0500
zink: add handling for tcs and tes shader states
Reviewed-by: Erik Faye-Lund <kusmabite at gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/8152>
---
src/gallium/drivers/zink/zink_blit.c | 2 ++
src/gallium/drivers/zink/zink_program.c | 48 +++++++++++++++++++++++++++++++++
2 files changed, 50 insertions(+)
diff --git a/src/gallium/drivers/zink/zink_blit.c b/src/gallium/drivers/zink/zink_blit.c
index 45d9b0ed911..71b36d0992d 100644
--- a/src/gallium/drivers/zink/zink_blit.c
+++ b/src/gallium/drivers/zink/zink_blit.c
@@ -201,6 +201,8 @@ zink_blit(struct pipe_context *pctx,
util_blitter_save_rasterizer(ctx->blitter, ctx->rast_state);
util_blitter_save_fragment_shader(ctx->blitter, ctx->gfx_stages[PIPE_SHADER_FRAGMENT]);
util_blitter_save_vertex_shader(ctx->blitter, ctx->gfx_stages[PIPE_SHADER_VERTEX]);
+ util_blitter_save_tessctrl_shader(ctx->blitter, ctx->gfx_stages[PIPE_SHADER_TESS_CTRL]);
+ util_blitter_save_tesseval_shader(ctx->blitter, ctx->gfx_stages[PIPE_SHADER_TESS_EVAL]);
util_blitter_save_geometry_shader(ctx->blitter, ctx->gfx_stages[PIPE_SHADER_GEOMETRY]);
util_blitter_save_framebuffer(ctx->blitter, &ctx->fb_state);
util_blitter_save_viewport(ctx->blitter, ctx->viewport_states);
diff --git a/src/gallium/drivers/zink/zink_program.c b/src/gallium/drivers/zink/zink_program.c
index 95e62855e37..55a428e56d5 100644
--- a/src/gallium/drivers/zink/zink_program.c
+++ b/src/gallium/drivers/zink/zink_program.c
@@ -637,6 +637,46 @@ zink_bind_gs_state(struct pipe_context *pctx,
bind_stage(zink_context(pctx), PIPE_SHADER_GEOMETRY, cso);
}
+static void *
+zink_create_tcs_state(struct pipe_context *pctx,
+ const struct pipe_shader_state *shader)
+{
+ struct nir_shader *nir;
+ if (shader->type != PIPE_SHADER_IR_NIR)
+ nir = zink_tgsi_to_nir(pctx->screen, shader->tokens);
+ else
+ nir = (struct nir_shader *)shader->ir.nir;
+
+ return zink_shader_create(zink_screen(pctx->screen), nir, &shader->stream_output);
+}
+
+static void
+zink_bind_tcs_state(struct pipe_context *pctx,
+ void *cso)
+{
+ bind_stage(zink_context(pctx), PIPE_SHADER_TESS_CTRL, cso);
+}
+
+static void *
+zink_create_tes_state(struct pipe_context *pctx,
+ const struct pipe_shader_state *shader)
+{
+ struct nir_shader *nir;
+ if (shader->type != PIPE_SHADER_IR_NIR)
+ nir = zink_tgsi_to_nir(pctx->screen, shader->tokens);
+ else
+ nir = (struct nir_shader *)shader->ir.nir;
+
+ return zink_shader_create(zink_screen(pctx->screen), nir, NULL);
+}
+
+static void
+zink_bind_tes_state(struct pipe_context *pctx,
+ void *cso)
+{
+ bind_stage(zink_context(pctx), PIPE_SHADER_TESS_EVAL, cso);
+}
+
static void
zink_delete_shader_state(struct pipe_context *pctx, void *cso)
{
@@ -658,4 +698,12 @@ zink_program_init(struct zink_context *ctx)
ctx->base.create_gs_state = zink_create_gs_state;
ctx->base.bind_gs_state = zink_bind_gs_state;
ctx->base.delete_gs_state = zink_delete_shader_state;
+
+ ctx->base.create_tcs_state = zink_create_tcs_state;
+ ctx->base.bind_tcs_state = zink_bind_tcs_state;
+ ctx->base.delete_tcs_state = zink_delete_shader_state;
+
+ ctx->base.create_tes_state = zink_create_tes_state;
+ ctx->base.bind_tes_state = zink_bind_tes_state;
+ ctx->base.delete_tes_state = zink_delete_shader_state;
}
More information about the mesa-commit
mailing list