mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-04 22:49:13 +02:00
cso: Do not hold references to bound textures.
Sampler views already hold references to those.
This commit is contained in:
parent
3949388ca3
commit
6420aca08b
1 changed files with 8 additions and 22 deletions
|
|
@ -71,16 +71,12 @@ struct cso_context {
|
|||
unsigned nr_vertex_samplers_saved;
|
||||
void *vertex_samplers_saved[PIPE_MAX_VERTEX_SAMPLERS];
|
||||
|
||||
struct pipe_texture *textures[PIPE_MAX_SAMPLERS];
|
||||
uint nr_fragment_sampler_views;
|
||||
struct pipe_sampler_view *fragment_sampler_views[PIPE_MAX_SAMPLERS];
|
||||
uint nr_textures;
|
||||
|
||||
uint nr_vertex_sampler_views;
|
||||
struct pipe_sampler_view *vertex_sampler_views[PIPE_MAX_VERTEX_SAMPLERS];
|
||||
|
||||
uint nr_textures_saved;
|
||||
struct pipe_texture *textures_saved[PIPE_MAX_SAMPLERS];
|
||||
uint nr_fragment_sampler_views_saved;
|
||||
struct pipe_sampler_view *fragment_sampler_views_saved[PIPE_MAX_SAMPLERS];
|
||||
|
||||
|
|
@ -299,8 +295,6 @@ void cso_release_all( struct cso_context *ctx )
|
|||
}
|
||||
|
||||
for (i = 0; i < PIPE_MAX_SAMPLERS; i++) {
|
||||
pipe_texture_reference(&ctx->textures[i], NULL);
|
||||
pipe_texture_reference(&ctx->textures_saved[i], NULL);
|
||||
pipe_sampler_view_reference(&ctx->fragment_sampler_views[i], NULL);
|
||||
pipe_sampler_view_reference(&ctx->fragment_sampler_views_saved[i], NULL);
|
||||
}
|
||||
|
|
@ -630,7 +624,7 @@ enum pipe_error cso_set_sampler_textures( struct cso_context *ctx,
|
|||
{
|
||||
uint i;
|
||||
|
||||
ctx->nr_textures = count;
|
||||
ctx->nr_fragment_sampler_views = count;
|
||||
|
||||
for (i = 0; i < count; i++) {
|
||||
struct pipe_sampler_view templ, *view;
|
||||
|
|
@ -638,15 +632,14 @@ enum pipe_error cso_set_sampler_textures( struct cso_context *ctx,
|
|||
u_sampler_view_default_template(&templ,
|
||||
textures[i],
|
||||
textures[i]->format);
|
||||
|
||||
view = ctx->pipe->create_sampler_view(ctx->pipe,
|
||||
textures[i],
|
||||
&templ);
|
||||
|
||||
pipe_texture_reference(&ctx->textures[i], textures[i]);
|
||||
pipe_sampler_view_reference(&ctx->fragment_sampler_views[i], view);
|
||||
}
|
||||
for ( ; i < PIPE_MAX_SAMPLERS; i++) {
|
||||
pipe_texture_reference(&ctx->textures[i], NULL);
|
||||
pipe_sampler_view_reference(&ctx->fragment_sampler_views[i], NULL);
|
||||
}
|
||||
|
||||
|
|
@ -661,12 +654,10 @@ void cso_save_sampler_textures( struct cso_context *ctx )
|
|||
{
|
||||
uint i;
|
||||
|
||||
ctx->nr_textures_saved = ctx->nr_textures;
|
||||
for (i = 0; i < ctx->nr_textures; i++) {
|
||||
assert(!ctx->textures_saved[i]);
|
||||
ctx->nr_fragment_sampler_views_saved = ctx->nr_fragment_sampler_views;
|
||||
for (i = 0; i < ctx->nr_fragment_sampler_views; i++) {
|
||||
assert(!ctx->fragment_sampler_views_saved[i]);
|
||||
|
||||
pipe_texture_reference(&ctx->textures_saved[i], ctx->textures[i]);
|
||||
pipe_sampler_view_reference(&ctx->fragment_sampler_views_saved[i],
|
||||
ctx->fragment_sampler_views[i]);
|
||||
}
|
||||
|
|
@ -676,27 +667,22 @@ void cso_restore_sampler_textures( struct cso_context *ctx )
|
|||
{
|
||||
uint i;
|
||||
|
||||
ctx->nr_textures = ctx->nr_textures_saved;
|
||||
|
||||
for (i = 0; i < ctx->nr_textures; i++) {
|
||||
pipe_texture_reference(&ctx->textures[i], NULL);
|
||||
ctx->textures[i] = ctx->textures_saved[i];
|
||||
ctx->textures_saved[i] = NULL;
|
||||
ctx->nr_fragment_sampler_views = ctx->nr_fragment_sampler_views_saved;
|
||||
|
||||
for (i = 0; i < ctx->nr_fragment_sampler_views; i++) {
|
||||
pipe_sampler_view_reference(&ctx->fragment_sampler_views[i], NULL);
|
||||
ctx->fragment_sampler_views[i] = ctx->fragment_sampler_views_saved[i];
|
||||
ctx->fragment_sampler_views_saved[i] = NULL;
|
||||
}
|
||||
for ( ; i < PIPE_MAX_SAMPLERS; i++) {
|
||||
pipe_texture_reference(&ctx->textures[i], NULL);
|
||||
pipe_sampler_view_reference(&ctx->fragment_sampler_views[i], NULL);
|
||||
}
|
||||
|
||||
ctx->pipe->set_fragment_sampler_views(ctx->pipe,
|
||||
ctx->nr_textures,
|
||||
ctx->nr_fragment_sampler_views,
|
||||
ctx->fragment_sampler_views);
|
||||
|
||||
ctx->nr_textures_saved = 0;
|
||||
ctx->nr_fragment_sampler_views_saved = 0;
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue