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