vc4: Enable sharing shaders across contexts.
authorEric Anholt <eric@anholt.net>
Tue, 17 May 2016 19:24:06 +0000 (12:24 -0700)
committerEric Anholt <eric@anholt.net>
Wed, 18 May 2016 01:07:39 +0000 (18:07 -0700)
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
src/gallium/drivers/vc4/vc4_screen.c

index 0a7bcb0374c12fd19577bad1d4c0429ab54e8ef6..36ad3875e7efd2f2e851bc6e80f29414115f0598 100644 (file)
@@ -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) {
index 86c2c3b94cc3aefeeda47ecf7442d18e5cac000a..6a56820709b281f5df09fbb3ac7a55db2fcec354 100644 (file)
@@ -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: