[Mesa-dev] [PATCH] cso: add context cleanup code from st/mesa

Marek Olšák maraeo at gmail.com
Mon May 18 05:08:18 PDT 2015


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.

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