Mesa (main): iris: Unify iris_create_[shader stage]_state functions
GitLab Mirror
gitlab-mirror at kemper.freedesktop.org
Wed Jul 28 18:00:25 UTC 2021
Module: Mesa
Branch: main
Commit: eafcee4ab17d244445a7d683d27376ff65d0819e
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=eafcee4ab17d244445a7d683d27376ff65d0819e
Author: Ian Romanick <ian.d.romanick at intel.com>
Date: Wed May 19 10:52:06 2021 -0700
iris: Unify iris_create_[shader stage]_state functions
v2: Merge old iris_create_shader_state into the new function.
Reviewed-by: Kenneth Graunke <kenneth at whitecape.org>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/11229>
---
src/gallium/drivers/iris/iris_program.c | 98 ++++++++++++++++++---------------
1 file changed, 53 insertions(+), 45 deletions(-)
diff --git a/src/gallium/drivers/iris/iris_program.c b/src/gallium/drivers/iris/iris_program.c
index e3c0ab7e7a1..cfd881f895d 100644
--- a/src/gallium/drivers/iris/iris_program.c
+++ b/src/gallium/drivers/iris/iris_program.c
@@ -2322,29 +2322,12 @@ iris_create_uncompiled_shader(struct iris_screen *screen,
return ish;
}
-static struct iris_uncompiled_shader *
-iris_create_shader_state(struct pipe_context *ctx,
- const struct pipe_shader_state *state)
-{
- struct iris_screen *screen = (void *) ctx->screen;
- struct nir_shader *nir;
-
- if (state->type == PIPE_SHADER_IR_TGSI)
- nir = tgsi_to_nir(state->tokens, ctx->screen, false);
- else
- nir = state->ir.nir;
-
- return iris_create_uncompiled_shader(screen, nir, &state->stream_output);
-}
-
static void *
-iris_create_vs_state(struct pipe_context *ctx,
- const struct pipe_shader_state *state)
+iris_create_vs_state(struct iris_context *ice,
+ struct iris_uncompiled_shader *ish)
{
- struct iris_context *ice = (void *) ctx;
- struct iris_screen *screen = (void *) ctx->screen;
+ struct iris_screen *screen = (void *) ice->ctx.screen;
struct u_upload_mgr *uploader = ice->shaders.uploader_unsync;
- struct iris_uncompiled_shader *ish = iris_create_shader_state(ctx, state);
/* User clip planes */
if (ish->nir->info.clip_distance_array_size == 0)
@@ -2361,14 +2344,12 @@ iris_create_vs_state(struct pipe_context *ctx,
}
static void *
-iris_create_tcs_state(struct pipe_context *ctx,
- const struct pipe_shader_state *state)
+iris_create_tcs_state(struct iris_context *ice,
+ struct iris_uncompiled_shader *ish)
{
- struct iris_context *ice = (void *) ctx;
- struct iris_screen *screen = (void *) ctx->screen;
+ struct iris_screen *screen = (void *) ice->ctx.screen;
const struct brw_compiler *compiler = screen->compiler;
struct u_upload_mgr *uploader = ice->shaders.uploader_unsync;
- struct iris_uncompiled_shader *ish = iris_create_shader_state(ctx, state);
struct shader_info *info = &ish->nir->info;
if (screen->precompile) {
@@ -2399,13 +2380,11 @@ iris_create_tcs_state(struct pipe_context *ctx,
}
static void *
-iris_create_tes_state(struct pipe_context *ctx,
- const struct pipe_shader_state *state)
+iris_create_tes_state(struct iris_context *ice,
+ struct iris_uncompiled_shader *ish)
{
- struct iris_context *ice = (void *) ctx;
- struct iris_screen *screen = (void *) ctx->screen;
+ struct iris_screen *screen = (void *) ice->ctx.screen;
struct u_upload_mgr *uploader = ice->shaders.uploader_unsync;
- struct iris_uncompiled_shader *ish = iris_create_shader_state(ctx, state);
struct shader_info *info = &ish->nir->info;
/* User clip planes */
@@ -2428,13 +2407,11 @@ iris_create_tes_state(struct pipe_context *ctx,
}
static void *
-iris_create_gs_state(struct pipe_context *ctx,
- const struct pipe_shader_state *state)
+iris_create_gs_state(struct iris_context *ice,
+ struct iris_uncompiled_shader *ish)
{
- struct iris_context *ice = (void *) ctx;
- struct iris_screen *screen = (void *) ctx->screen;
+ struct iris_screen *screen = (void *) ice->ctx.screen;
struct u_upload_mgr *uploader = ice->shaders.uploader_unsync;
- struct iris_uncompiled_shader *ish = iris_create_shader_state(ctx, state);
/* User clip planes */
if (ish->nir->info.clip_distance_array_size == 0)
@@ -2451,13 +2428,11 @@ iris_create_gs_state(struct pipe_context *ctx,
}
static void *
-iris_create_fs_state(struct pipe_context *ctx,
- const struct pipe_shader_state *state)
+iris_create_fs_state(struct iris_context *ice,
+ struct iris_uncompiled_shader *ish)
{
- struct iris_context *ice = (void *) ctx;
- struct iris_screen *screen = (void *) ctx->screen;
+ struct iris_screen *screen = (void *) ice->ctx.screen;
struct u_upload_mgr *uploader = ice->shaders.uploader_unsync;
- struct iris_uncompiled_shader *ish = iris_create_shader_state(ctx, state);
struct shader_info *info = &ish->nir->info;
ish->nos |= (1ull << IRIS_NOS_FRAMEBUFFER) |
@@ -2549,6 +2524,39 @@ iris_create_compute_state(struct pipe_context *ctx,
return ish;
}
+static void *
+iris_create_shader_state(struct pipe_context *ctx,
+ const struct pipe_shader_state *state)
+{
+ struct iris_context *ice = (void *) ctx;
+ struct iris_screen *screen = (void *) ctx->screen;
+ struct nir_shader *nir;
+ struct shader_info *info = &ish->nir->info;
+
+ if (state->type == PIPE_SHADER_IR_TGSI)
+ nir = tgsi_to_nir(state->tokens, ctx->screen, false);
+ else
+ nir = state->ir.nir;
+
+ struct iris_uncompiled_shader *ish =
+ iris_create_uncompiled_shader(screen, nir, &state->stream_output);
+
+ switch (info->stage) {
+ case MESA_SHADER_VERTEX:
+ return iris_create_vs_state(ice, ish);
+ case MESA_SHADER_TESS_CTRL:
+ return iris_create_tcs_state(ice, ish);
+ case MESA_SHADER_TESS_EVAL:
+ return iris_create_tes_state(ice, ish);
+ case MESA_SHADER_GEOMETRY:
+ return iris_create_gs_state(ice, ish);
+ case MESA_SHADER_FRAGMENT:
+ return iris_create_fs_state(ice, ish);
+ default:
+ unreachable("Invalid shader stage.");
+ }
+}
+
/**
* The pipe->delete_[stage]_state() driver hooks.
*
@@ -2725,11 +2733,11 @@ iris_bind_cs_state(struct pipe_context *ctx, void *state)
void
iris_init_program_functions(struct pipe_context *ctx)
{
- ctx->create_vs_state = iris_create_vs_state;
- ctx->create_tcs_state = iris_create_tcs_state;
- ctx->create_tes_state = iris_create_tes_state;
- ctx->create_gs_state = iris_create_gs_state;
- ctx->create_fs_state = iris_create_fs_state;
+ ctx->create_vs_state = iris_create_shader_state;
+ ctx->create_tcs_state = iris_create_shader_state;
+ ctx->create_tes_state = iris_create_shader_state;
+ ctx->create_gs_state = iris_create_shader_state;
+ ctx->create_fs_state = iris_create_shader_state;
ctx->create_compute_state = iris_create_compute_state;
ctx->delete_vs_state = iris_delete_shader_state;
More information about the mesa-commit
mailing list