summaryrefslogtreecommitdiffstats
path: root/src/gallium/drivers/freedreno/freedreno_program.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/gallium/drivers/freedreno/freedreno_program.c')
-rw-r--r--src/gallium/drivers/freedreno/freedreno_program.c30
1 files changed, 30 insertions, 0 deletions
diff --git a/src/gallium/drivers/freedreno/freedreno_program.c b/src/gallium/drivers/freedreno/freedreno_program.c
index 62fd55b1ac2..8567883fb77 100644
--- a/src/gallium/drivers/freedreno/freedreno_program.c
+++ b/src/gallium/drivers/freedreno/freedreno_program.c
@@ -48,6 +48,33 @@ fd_vs_state_bind(struct pipe_context *pctx, void *hwcso)
ctx->dirty |= FD_DIRTY_PROG;
}
+static void
+fd_tcs_state_bind(struct pipe_context *pctx, void *hwcso)
+{
+ struct fd_context *ctx = fd_context(pctx);
+ ctx->prog.hs = hwcso;
+ ctx->dirty_shader[PIPE_SHADER_TESS_CTRL] |= FD_DIRTY_SHADER_PROG;
+ ctx->dirty |= FD_DIRTY_PROG;
+}
+
+static void
+fd_tes_state_bind(struct pipe_context *pctx, void *hwcso)
+{
+ struct fd_context *ctx = fd_context(pctx);
+ ctx->prog.ds = hwcso;
+ ctx->dirty_shader[PIPE_SHADER_TESS_EVAL] |= FD_DIRTY_SHADER_PROG;
+ ctx->dirty |= FD_DIRTY_PROG;
+}
+
+static void
+fd_gs_state_bind(struct pipe_context *pctx, void *hwcso)
+{
+ struct fd_context *ctx = fd_context(pctx);
+ ctx->prog.gs = hwcso;
+ ctx->dirty_shader[PIPE_SHADER_GEOMETRY] |= FD_DIRTY_SHADER_PROG;
+ ctx->dirty |= FD_DIRTY_PROG;
+}
+
static const char *solid_fs =
"FRAG \n"
"PROPERTY FS_COLOR0_WRITES_ALL_CBUFS 1 \n"
@@ -128,6 +155,9 @@ void fd_prog_init(struct pipe_context *pctx)
pctx->bind_vs_state = fd_vs_state_bind;
pctx->bind_fs_state = fd_fs_state_bind;
+ pctx->bind_tcs_state = fd_tcs_state_bind;
+ pctx->bind_tes_state = fd_tes_state_bind;
+ pctx->bind_gs_state = fd_gs_state_bind;
ctx->solid_prog.fs = assemble_tgsi(pctx, solid_fs, true);
ctx->solid_prog.vs = assemble_tgsi(pctx, solid_vs, false);