[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