gallium/radeon: add and use r600_texture_reference

Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
Reviewed-by: Vedran Miletić <vedran@miletic.net>
Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
This commit is contained in:
Marek Olšák 2016-06-21 21:17:44 +02:00
parent 6da92df538
commit 36cf5a57c2
5 changed files with 13 additions and 10 deletions

View file

@ -131,7 +131,7 @@ struct pipe_video_buffer *r600_video_buffer_create(struct pipe_context *pipe,
error:
for (i = 0; i < VL_NUM_COMPONENTS; ++i)
pipe_resource_reference((struct pipe_resource **)&resources[i], NULL);
r600_texture_reference(&resources[i], NULL);
return NULL;
}

View file

@ -483,8 +483,7 @@ void r600_common_context_cleanup(struct r600_common_context *rctx)
rctx->b.destroy_query(&rctx->b,
rctx->dcc_stats[i].ps_stats[j]);
pipe_resource_reference((struct pipe_resource**)
&rctx->dcc_stats[i].tex, NULL);
r600_texture_reference(&rctx->dcc_stats[i].tex, NULL);
}
if (rctx->gfx.cs)

View file

@ -794,6 +794,12 @@ r600_resource_reference(struct r600_resource **ptr, struct r600_resource *res)
(struct pipe_resource *)res);
}
static inline void
r600_texture_reference(struct r600_texture **ptr, struct r600_texture *res)
{
pipe_resource_reference((struct pipe_resource **)ptr, &res->resource.b.b);
}
static inline bool r600_get_strmout_en(struct r600_common_context *rctx)
{
return rctx->streamout.streamout_enabled ||

View file

@ -479,7 +479,7 @@ static void r600_degrade_tile_mode_to_linear(struct r600_common_context *rctx,
assert(!rtex->dcc_offset);
assert(!rtex->is_depth);
pipe_resource_reference((struct pipe_resource**)&new_tex, NULL);
r600_texture_reference(&new_tex, NULL);
r600_dirty_all_framebuffer_states(rctx->screen);
p_atomic_inc(&rctx->screen->dirty_tex_descriptor_counter);
@ -561,7 +561,7 @@ static void r600_texture_destroy(struct pipe_screen *screen,
struct r600_resource *resource = &rtex->resource;
if (rtex->flushed_depth_texture)
pipe_resource_reference((struct pipe_resource **)&rtex->flushed_depth_texture, NULL);
r600_texture_reference(&rtex->flushed_depth_texture, NULL);
r600_resource_reference(&rtex->htile_buffer, NULL);
if (rtex->cmask_buffer != &rtex->resource) {
@ -1759,14 +1759,12 @@ static unsigned vi_get_context_dcc_stats_index(struct r600_common_context *rctx,
rctx->dcc_stats[oldest_slot].ps_stats[i] = NULL;
}
pipe_resource_reference((struct pipe_resource**)
&rctx->dcc_stats[oldest_slot].tex, NULL);
r600_texture_reference(&rctx->dcc_stats[oldest_slot].tex, NULL);
empty_slot = oldest_slot;
}
/* Add the texture to the new slot. */
pipe_resource_reference((struct pipe_resource**)&rctx->dcc_stats[empty_slot].tex,
&tex->resource.b.b);
r600_texture_reference(&rctx->dcc_stats[empty_slot].tex, tex);
rctx->dcc_stats[empty_slot].last_use_timestamp = os_time_get();
return empty_slot;
}

View file

@ -113,7 +113,7 @@ struct pipe_video_buffer *si_video_buffer_create(struct pipe_context *pipe,
error:
for (i = 0; i < VL_NUM_COMPONENTS; ++i)
pipe_resource_reference((struct pipe_resource **)&resources[i], NULL);
r600_texture_reference(&resources[i], NULL);
return NULL;
}