mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-01-02 18:10:17 +01:00
gallium: use pipe_texture_reference() in a few places (fixes refcounting bugs)
This commit is contained in:
parent
648e26aa95
commit
7f43029377
2 changed files with 17 additions and 4 deletions
|
|
@ -621,7 +621,7 @@ aaline_first_line(struct draw_stage *stage, struct prim_header *header)
|
|||
bind_aaline_fragment_shader(aaline);
|
||||
|
||||
aaline->state.sampler[num] = aaline->sampler_cso;
|
||||
aaline->state.texture[num] = aaline->texture;
|
||||
pipe_texture_reference(&aaline->state.texture[num], aaline->texture);
|
||||
|
||||
aaline->driver_bind_sampler_states(pipe, num + 1, aaline->state.sampler);
|
||||
aaline->driver_set_sampler_textures(pipe, num + 1, aaline->state.texture);
|
||||
|
|
@ -769,9 +769,14 @@ aaline_set_sampler_textures(struct pipe_context *pipe,
|
|||
unsigned num, struct pipe_texture **texture)
|
||||
{
|
||||
struct aaline_stage *aaline = aaline_stage_from_pipe(pipe);
|
||||
uint i;
|
||||
|
||||
/* save current */
|
||||
memcpy(aaline->state.texture, texture, num * sizeof(struct pipe_texture *));
|
||||
for (i = 0; i < num; i++) {
|
||||
pipe_texture_reference(&aaline->state.texture[i], texture[i]);
|
||||
}
|
||||
aaline->num_textures = num;
|
||||
|
||||
/* pass-through */
|
||||
aaline->driver_set_sampler_textures(aaline->pipe, num, texture);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -398,6 +398,7 @@ pstip_create_texture(struct pstip_stage *pstip)
|
|||
texTemp.cpp = 1;
|
||||
|
||||
pstip->texture = screen->texture_create(screen, &texTemp);
|
||||
assert(pstip->texture->refcount == 1);
|
||||
|
||||
//pstip_update_texture(pstip);
|
||||
}
|
||||
|
|
@ -492,7 +493,8 @@ pstip_first_tri(struct draw_stage *stage, struct prim_header *header)
|
|||
|
||||
/* plug in our sampler, texture */
|
||||
pstip->state.samplers[pstip->sampler_unit] = pstip->sampler_cso;
|
||||
pstip->state.textures[pstip->sampler_unit] = pstip->texture;
|
||||
pipe_texture_reference(&pstip->state.textures[pstip->sampler_unit],
|
||||
pstip->texture);
|
||||
|
||||
pstip->driver_bind_sampler_states(pipe, num_samplers, pstip->state.samplers);
|
||||
pstip->driver_set_sampler_textures(pipe, num_samplers, pstip->state.textures);
|
||||
|
|
@ -624,6 +626,7 @@ pstip_bind_sampler_states(struct pipe_context *pipe,
|
|||
unsigned num, void **sampler)
|
||||
{
|
||||
struct pstip_stage *pstip = pstip_stage_from_pipe(pipe);
|
||||
|
||||
/* save current */
|
||||
memcpy(pstip->state.samplers, sampler, num * sizeof(void *));
|
||||
pstip->num_samplers = num;
|
||||
|
|
@ -637,9 +640,14 @@ pstip_set_sampler_textures(struct pipe_context *pipe,
|
|||
unsigned num, struct pipe_texture **texture)
|
||||
{
|
||||
struct pstip_stage *pstip = pstip_stage_from_pipe(pipe);
|
||||
uint i;
|
||||
|
||||
/* save current */
|
||||
memcpy(pstip->state.textures, texture, num * sizeof(struct pipe_texture *));
|
||||
for (i = 0; i < num; i++) {
|
||||
pipe_texture_reference(&pstip->state.textures[i], texture[i]);
|
||||
}
|
||||
pstip->num_textures = num;
|
||||
|
||||
/* pass-through */
|
||||
pstip->driver_set_sampler_textures(pstip->pipe, num, texture);
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue