Mesa (master): softpipe: Refactor pipe_shader_state setup.
GitLab Mirror
gitlab-mirror at kemper.freedesktop.org
Thu Jul 23 00:47:16 UTC 2020
Module: Mesa
Branch: master
Commit: 86cfb62b87edfea90959a7e6933087fe4467dfa2
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=86cfb62b87edfea90959a7e6933087fe4467dfa2
Author: Eric Anholt <eric at anholt.net>
Date: Tue Dec 31 16:31:54 2019 -0800
softpipe: Refactor pipe_shader_state setup.
We had repeated code that I want to repeatedly change for adding
nir-to-tgsi.
Reviewed-by: Dave Airlie <airlied at redhat.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/6018>
---
src/gallium/drivers/softpipe/sp_state_shader.c | 42 ++++++++++++--------------
1 file changed, 20 insertions(+), 22 deletions(-)
diff --git a/src/gallium/drivers/softpipe/sp_state_shader.c b/src/gallium/drivers/softpipe/sp_state_shader.c
index dc2418f5a50..fef187e7f11 100644
--- a/src/gallium/drivers/softpipe/sp_state_shader.c
+++ b/src/gallium/drivers/softpipe/sp_state_shader.c
@@ -114,6 +114,21 @@ softpipe_find_fs_variant(struct softpipe_context *sp,
return create_fs_variant(sp, fs, key);
}
+static void
+softpipe_create_shader_state(struct pipe_shader_state *shader,
+ const struct pipe_shader_state *templ,
+ bool debug)
+{
+ assert(templ->type == PIPE_SHADER_IR_TGSI);
+ shader->type = PIPE_SHADER_IR_TGSI;
+ /* we need to keep a local copy of the tokens */
+ shader->tokens = tgsi_dup_tokens(templ->tokens);
+
+ shader->stream_output = templ->stream_output;
+
+ if (debug)
+ tgsi_dump(shader->tokens, 0);
+}
static void *
softpipe_create_fs_state(struct pipe_context *pipe,
@@ -122,12 +137,7 @@ softpipe_create_fs_state(struct pipe_context *pipe,
struct softpipe_context *softpipe = softpipe_context(pipe);
struct sp_fragment_shader *state = CALLOC_STRUCT(sp_fragment_shader);
- /* debug */
- if (softpipe->dump_fs)
- tgsi_dump(templ->tokens, 0);
-
- /* we need to keep a local copy of the tokens */
- state->shader.tokens = tgsi_dup_tokens(templ->tokens);
+ softpipe_create_shader_state(&state->shader, templ, softpipe->dump_fs);
/* draw's fs state */
state->draw_shader = draw_create_fragment_shader(softpipe->draw,
@@ -211,13 +221,11 @@ softpipe_create_vs_state(struct pipe_context *pipe,
if (!state)
goto fail;
- /* copy shader tokens, the ones passed in will go away.
- */
- state->shader.tokens = tgsi_dup_tokens(templ->tokens);
- if (state->shader.tokens == NULL)
+ softpipe_create_shader_state(&state->shader, templ, false);
+ if (!state->shader.tokens)
goto fail;
- state->draw_data = draw_create_vertex_shader(softpipe->draw, templ);
+ state->draw_data = draw_create_vertex_shader(softpipe->draw, &state->shader);
if (state->draw_data == NULL)
goto fail;
@@ -273,19 +281,9 @@ softpipe_create_gs_state(struct pipe_context *pipe,
if (!state)
goto fail;
- state->shader = *templ;
+ softpipe_create_shader_state(&state->shader, templ, softpipe->dump_gs);
if (templ->tokens) {
- /* debug */
- if (softpipe->dump_gs)
- tgsi_dump(templ->tokens, 0);
-
- /* copy shader tokens, the ones passed in will go away.
- */
- state->shader.tokens = tgsi_dup_tokens(templ->tokens);
- if (state->shader.tokens == NULL)
- goto fail;
-
state->draw_data = draw_create_geometry_shader(softpipe->draw, templ);
if (state->draw_data == NULL)
goto fail;
More information about the mesa-commit
mailing list