iris: bind state helper function
authorKenneth Graunke <kenneth@whitecape.org>
Mon, 16 Jul 2018 23:25:02 +0000 (16:25 -0700)
committerKenneth Graunke <kenneth@whitecape.org>
Thu, 21 Feb 2019 18:26:07 +0000 (10:26 -0800)
src/gallium/drivers/iris/iris_program.c

index 5ac582955f78f713e29ea2636f268cb4b1eaff92..3d3b80bf5fbf21e3b2ee5a3f8b31d2a1f7033c6d 100644 (file)
@@ -83,21 +83,26 @@ iris_delete_shader_state(struct pipe_context *ctx, void *state)
 }
 
 static void
-iris_bind_vs_state(struct pipe_context *ctx, void *state)
+bind_state(struct iris_context *ice,
+           struct iris_uncompiled_shader *ish,
+           gl_shader_stage stage)
 {
-   struct iris_context *ice = (struct iris_context *)ctx;
+   uint64_t dirty_bit = IRIS_DIRTY_UNCOMPILED_VS << stage;
 
-   ice->shaders.uncompiled[MESA_SHADER_VERTEX] = state;
-   ice->state.dirty |= IRIS_DIRTY_UNCOMPILED_VS;
+   ice->shaders.uncompiled[stage] = ish;
+   ice->state.dirty |= dirty_bit;
 }
 
 static void
-iris_bind_tcs_state(struct pipe_context *ctx, void *state)
+iris_bind_vs_state(struct pipe_context *ctx, void *state)
 {
-   struct iris_context *ice = (struct iris_context *)ctx;
+   bind_state((void *) ctx, state, MESA_SHADER_VERTEX);
+}
 
-   ice->shaders.uncompiled[MESA_SHADER_TESS_CTRL] = state;
-   ice->state.dirty |= IRIS_DIRTY_UNCOMPILED_TCS;
+static void
+iris_bind_tcs_state(struct pipe_context *ctx, void *state)
+{
+   bind_state((void *) ctx, state, MESA_SHADER_TESS_CTRL);
 }
 
 static void
@@ -108,8 +113,7 @@ iris_bind_tes_state(struct pipe_context *ctx, void *state)
    if (!!state != !!ice->shaders.uncompiled[MESA_SHADER_TESS_EVAL])
       ice->state.dirty |= IRIS_DIRTY_URB;
 
-   ice->shaders.uncompiled[MESA_SHADER_TESS_EVAL] = state;
-   ice->state.dirty |= IRIS_DIRTY_UNCOMPILED_TES;
+   bind_state((void *) ctx, state, MESA_SHADER_TESS_EVAL);
 }
 
 static void
@@ -120,17 +124,13 @@ iris_bind_gs_state(struct pipe_context *ctx, void *state)
    if (!!state != !!ice->shaders.uncompiled[MESA_SHADER_GEOMETRY])
       ice->state.dirty |= IRIS_DIRTY_URB;
 
-   ice->shaders.uncompiled[MESA_SHADER_GEOMETRY] = state;
-   ice->state.dirty |= IRIS_DIRTY_UNCOMPILED_GS;
+   bind_state((void *) ctx, state, MESA_SHADER_GEOMETRY);
 }
 
 static void
 iris_bind_fs_state(struct pipe_context *ctx, void *state)
 {
-   struct iris_context *ice = (struct iris_context *)ctx;
-
-   ice->shaders.uncompiled[MESA_SHADER_FRAGMENT] = state;
-   ice->state.dirty |= IRIS_DIRTY_UNCOMPILED_FS;
+   bind_state((void *) ctx, state, MESA_SHADER_FRAGMENT);
 }
 
 /**