Mesa (master): vc4: Enable sharing shaders across contexts.

Eric Anholt anholt at kemper.freedesktop.org
Wed May 18 01:11:49 UTC 2016


Module: Mesa
Branch: master
Commit: 8835eb689b51593dcbe09f39a79af9e551c3e0b4
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=8835eb689b51593dcbe09f39a79af9e551c3e0b4

Author: Eric Anholt <eric at anholt.net>
Date:   Tue May 17 12:24:06 2016 -0700

vc4: Enable sharing shaders across contexts.

This allows the same pipe_shader_state to be referenced from multiple
contexts.  Since our pipe_shader_state is treated as immutable (other than
the variant number) within the driver, this is no problem.

---

 src/gallium/drivers/vc4/vc4_program.c | 3 ++-
 src/gallium/drivers/vc4/vc4_screen.c  | 2 +-
 2 files changed, 3 insertions(+), 2 deletions(-)

diff --git a/src/gallium/drivers/vc4/vc4_program.c b/src/gallium/drivers/vc4/vc4_program.c
index 0a7bcb0..36ad387 100644
--- a/src/gallium/drivers/vc4/vc4_program.c
+++ b/src/gallium/drivers/vc4/vc4_program.c
@@ -1766,7 +1766,8 @@ vc4_shader_ntq(struct vc4_context *vc4, enum qstage stage,
         c->stage = stage;
         c->shader_state = &key->shader_state->base;
         c->program_id = key->shader_state->program_id;
-        c->variant_id = key->shader_state->compiled_variant_count++;
+        c->variant_id =
+                p_atomic_inc_return(&key->shader_state->compiled_variant_count);
 
         c->key = key;
         switch (stage) {
diff --git a/src/gallium/drivers/vc4/vc4_screen.c b/src/gallium/drivers/vc4/vc4_screen.c
index 86c2c3b..6a56820 100644
--- a/src/gallium/drivers/vc4/vc4_screen.c
+++ b/src/gallium/drivers/vc4/vc4_screen.c
@@ -94,6 +94,7 @@ vc4_screen_get_param(struct pipe_screen *pscreen, enum pipe_cap param)
         case PIPE_CAP_VERTEX_COLOR_UNCLAMPED:
         case PIPE_CAP_BUFFER_MAP_PERSISTENT_COHERENT:
         case PIPE_CAP_NPOT_TEXTURES:
+        case PIPE_CAP_SHAREABLE_SHADERS:
         case PIPE_CAP_USER_CONSTANT_BUFFERS:
         case PIPE_CAP_TEXTURE_SHADOW_MAP:
         case PIPE_CAP_BLEND_EQUATION_SEPARATE:
@@ -189,7 +190,6 @@ vc4_screen_get_param(struct pipe_screen *pscreen, enum pipe_cap param)
         case PIPE_CAP_DEPTH_BOUNDS_TEST:
         case PIPE_CAP_TGSI_TXQS:
         case PIPE_CAP_FORCE_PERSAMPLE_INTERP:
-        case PIPE_CAP_SHAREABLE_SHADERS:
         case PIPE_CAP_COPY_BETWEEN_COMPRESSED_AND_PLAIN_FORMATS:
         case PIPE_CAP_CLEAR_TEXTURE:
         case PIPE_CAP_DRAW_PARAMETERS:




More information about the mesa-commit mailing list