I believe that the previous suggestion was that cso didn't need to know anything about compute shaders... just call the functions directly.
On Sat, Feb 6, 2016 at 5:04 PM, Samuel Pitoiset <[email protected]> wrote: > Changes from v2: > - removed cso_{save,restore}_compute_shader() functions and the > compute_shader_saved variable because disabling compute shaders for > meta ops is not currently needed > > Signed-off-by: Samuel Pitoiset <[email protected]> > Reviewed-by: Ilia Mirkin <[email protected]> (v1) > --- > src/gallium/auxiliary/cso_cache/cso_context.c | 30 > +++++++++++++++++++++++++++ > src/gallium/auxiliary/cso_cache/cso_context.h | 4 ++++ > 2 files changed, 34 insertions(+) > > diff --git a/src/gallium/auxiliary/cso_cache/cso_context.c > b/src/gallium/auxiliary/cso_cache/cso_context.c > index 6b29b20..79ae753 100644 > --- a/src/gallium/auxiliary/cso_cache/cso_context.c > +++ b/src/gallium/auxiliary/cso_cache/cso_context.c > @@ -69,6 +69,7 @@ struct cso_context { > > boolean has_geometry_shader; > boolean has_tessellation; > + boolean has_compute_shader; > boolean has_streamout; > > struct pipe_sampler_view *fragment_views[PIPE_MAX_SHADER_SAMPLER_VIEWS]; > @@ -106,6 +107,7 @@ struct cso_context { > void *geometry_shader, *geometry_shader_saved; > void *tessctrl_shader, *tessctrl_shader_saved; > void *tesseval_shader, *tesseval_shader_saved; > + void *compute_shader; > void *velements, *velements_saved; > struct pipe_query *render_condition, *render_condition_saved; > uint render_condition_mode, render_condition_mode_saved; > @@ -272,6 +274,10 @@ struct cso_context *cso_create_context( struct > pipe_context *pipe ) > PIPE_SHADER_CAP_MAX_INSTRUCTIONS) > 0) { > ctx->has_tessellation = TRUE; > } > + if (pipe->screen->get_shader_param(pipe->screen, PIPE_SHADER_COMPUTE, > + PIPE_SHADER_CAP_MAX_INSTRUCTIONS) > 0) > { > + ctx->has_compute_shader = TRUE; > + } > if (pipe->screen->get_param(pipe->screen, > PIPE_CAP_MAX_STREAM_OUTPUT_BUFFERS) != 0) { > ctx->has_streamout = TRUE; > @@ -333,6 +339,10 @@ void cso_destroy_context( struct cso_context *ctx ) > ctx->pipe->bind_tes_state(ctx->pipe, NULL); > ctx->pipe->set_constant_buffer(ctx->pipe, PIPE_SHADER_TESS_EVAL, 0, > NULL); > } > + if (ctx->has_compute_shader) { > + ctx->pipe->bind_compute_state(ctx->pipe, NULL); > + ctx->pipe->set_constant_buffer(ctx->pipe, PIPE_SHADER_COMPUTE, 0, > NULL); > + } > ctx->pipe->bind_vertex_elements_state( ctx->pipe, NULL ); > > if (ctx->has_streamout) > @@ -907,6 +917,26 @@ void cso_restore_tesseval_shader(struct cso_context *ctx) > ctx->tesseval_shader_saved = NULL; > } > > +void cso_set_compute_shader_handle(struct cso_context *ctx, void *handle) > +{ > + assert(ctx->has_compute_shader || !handle); > + > + if (ctx->has_compute_shader && ctx->compute_shader != handle) { > + ctx->compute_shader = handle; > + ctx->pipe->bind_compute_state(ctx->pipe, handle); > + } > +} > + > +void cso_delete_compute_shader(struct cso_context *ctx, void *handle) > +{ > + if (handle == ctx->compute_shader) { > + /* unbind before deleting */ > + ctx->pipe->bind_compute_state(ctx->pipe, NULL); > + ctx->compute_shader = NULL; > + } > + ctx->pipe->delete_compute_state(ctx->pipe, handle); > +} > + > enum pipe_error > cso_set_vertex_elements(struct cso_context *ctx, > unsigned count, > diff --git a/src/gallium/auxiliary/cso_cache/cso_context.h > b/src/gallium/auxiliary/cso_cache/cso_context.h > index f0a2739..ec9112b 100644 > --- a/src/gallium/auxiliary/cso_cache/cso_context.h > +++ b/src/gallium/auxiliary/cso_cache/cso_context.h > @@ -151,6 +151,10 @@ void cso_save_tesseval_shader(struct cso_context *cso); > void cso_restore_tesseval_shader(struct cso_context *cso); > > > +void cso_set_compute_shader_handle(struct cso_context *ctx, void *handle); > +void cso_delete_compute_shader(struct cso_context *ctx, void *handle); > + > + > void cso_set_framebuffer(struct cso_context *cso, > const struct pipe_framebuffer_state *fb); > void cso_save_framebuffer(struct cso_context *cso); > -- > 2.6.4 > > _______________________________________________ > mesa-dev mailing list > [email protected] > https://lists.freedesktop.org/mailman/listinfo/mesa-dev _______________________________________________ mesa-dev mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/mesa-dev
