[Mesa-dev] [PATCH] cso: add context cleanup code from st/mesa
Samuel Pitoiset
samuel.pitoiset at gmail.com
Mon May 18 06:32:21 PDT 2015
On 05/18/2015 02:08 PM, Marek Olšák wrote:
> Technically speaking, nothing needs to be destroyed. It's the
> responsibility of the driver to clean up after itself.
>
> The answer is no, because the compute shader isn't used by cso_context
> and st/mesa.
Sounds good to me. Thanks for your answer Marek.
This patch is :
Reviewed-by: Samuel Pitoiset <samuel.pitoiset at gmail.com>
>
> Marek
>
> On Mon, May 18, 2015 at 1:15 PM, Samuel Pitoiset
> <samuel.pitoiset at gmail.com> wrote:
>>
>> On 05/18/2015 11:29 AM, Marek Olšák wrote:
>>> From: Marek Olšák <marek.olsak at amd.com>
>>>
>>> This fixes a crash in nouveau which can't handle
>>> set_constant_buffer(PIPE_SHADER_TESS_*).
>>> ---
>>> src/gallium/auxiliary/cso_cache/cso_context.c | 7 +++++++
>>> src/mesa/state_tracker/st_context.c | 6 ------
>>> 2 files changed, 7 insertions(+), 6 deletions(-)
>>>
>>> diff --git a/src/gallium/auxiliary/cso_cache/cso_context.c
>>> b/src/gallium/auxiliary/cso_cache/cso_context.c
>>> index 59bad2c..744b00c 100644
>>> --- a/src/gallium/auxiliary/cso_cache/cso_context.c
>>> +++ b/src/gallium/auxiliary/cso_cache/cso_context.c
>>> @@ -300,6 +300,8 @@ void cso_destroy_context( struct cso_context *ctx )
>>> unsigned i, shader;
>>> if (ctx->pipe) {
>>> + ctx->pipe->set_index_buffer(ctx->pipe, NULL);
>>> +
>>> ctx->pipe->bind_blend_state( ctx->pipe, NULL );
>>> ctx->pipe->bind_rasterizer_state( ctx->pipe, NULL );
>>> @@ -326,13 +328,18 @@ void cso_destroy_context( struct cso_context *ctx
>>> )
>>> ctx->pipe->bind_depth_stencil_alpha_state( ctx->pipe, NULL );
>>> ctx->pipe->bind_fs_state( ctx->pipe, NULL );
>>> + ctx->pipe->set_constant_buffer(ctx->pipe, PIPE_SHADER_FRAGMENT, 0,
>>> NULL);
>>> ctx->pipe->bind_vs_state( ctx->pipe, NULL );
>>> + ctx->pipe->set_constant_buffer(ctx->pipe, PIPE_SHADER_VERTEX, 0,
>>> NULL);
>>> if (ctx->has_geometry_shader) {
>>> ctx->pipe->bind_gs_state(ctx->pipe, NULL);
>>> + ctx->pipe->set_constant_buffer(ctx->pipe, PIPE_SHADER_GEOMETRY,
>>> 0, NULL);
>>> }
>>> if (ctx->has_tessellation) {
>>> ctx->pipe->bind_tcs_state(ctx->pipe, NULL);
>>> + ctx->pipe->set_constant_buffer(ctx->pipe, PIPE_SHADER_TESS_CTRL,
>>> 0, NULL);
>>> ctx->pipe->bind_tes_state(ctx->pipe, NULL);
>>> + ctx->pipe->set_constant_buffer(ctx->pipe, PIPE_SHADER_TESS_EVAL,
>>> 0, NULL);
>>> }
>>> ctx->pipe->bind_vertex_elements_state( ctx->pipe, NULL );
>>> diff --git a/src/mesa/state_tracker/st_context.c
>>> b/src/mesa/state_tracker/st_context.c
>>> index fa87dd7..ef4ad1b 100644
>>> --- a/src/mesa/state_tracker/st_context.c
>>> +++ b/src/mesa/state_tracker/st_context.c
>>> @@ -378,12 +378,6 @@ void st_destroy_context( struct st_context *st )
>>> }
>>> pipe_surface_reference(&st->state.framebuffer.zsbuf, NULL);
>>> - pipe->set_index_buffer(pipe, NULL);
>>> -
>>> - for (i = 0; i < PIPE_SHADER_TYPES; i++) {
>>> - pipe->set_constant_buffer(pipe, i, 0, NULL);
>>> - }
>>> -
>>> _mesa_delete_program_cache(st->ctx, st->pixel_xfer.cache);
>>> _vbo_DestroyContext(st->ctx);
>>
>> PIPE_SHADER_COMPUTE doesn't need to be destroyed?
>>
More information about the mesa-dev
mailing list