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.
This commit is contained in:
@@ -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) {
|
||||
|
||||
@@ -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:
|
||||
|
||||
Reference in New Issue
Block a user