radeonsi: Avoid leaking memory when rebuilding shader states
Reviewed-by: Michel Dänzer <michel.daenzer@amd.com>
This commit is contained in:
committed by
Tom Stellard
parent
bb26ebac13
commit
5935edd47c
@@ -103,6 +103,13 @@ void si_pm4_add_bo(struct si_pm4_state *state,
|
||||
state->bo_priority[idx] = priority;
|
||||
}
|
||||
|
||||
void si_pm4_free_state_simple(struct si_pm4_state *state)
|
||||
{
|
||||
for (int i = 0; i < state->nbo; ++i)
|
||||
r600_resource_reference(&state->bo[i], NULL);
|
||||
FREE(state);
|
||||
}
|
||||
|
||||
void si_pm4_free_state(struct si_context *sctx,
|
||||
struct si_pm4_state *state,
|
||||
unsigned idx)
|
||||
@@ -114,10 +121,7 @@ void si_pm4_free_state(struct si_context *sctx,
|
||||
sctx->emitted.array[idx] = NULL;
|
||||
}
|
||||
|
||||
for (int i = 0; i < state->nbo; ++i) {
|
||||
r600_resource_reference(&state->bo[i], NULL);
|
||||
}
|
||||
FREE(state);
|
||||
si_pm4_free_state_simple(state);
|
||||
}
|
||||
|
||||
unsigned si_pm4_dirty_dw(struct si_context *sctx)
|
||||
|
||||
@@ -71,6 +71,7 @@ void si_pm4_add_bo(struct si_pm4_state *state,
|
||||
enum radeon_bo_usage usage,
|
||||
enum radeon_bo_priority priority);
|
||||
|
||||
void si_pm4_free_state_simple(struct si_pm4_state *state);
|
||||
void si_pm4_free_state(struct si_context *sctx,
|
||||
struct si_pm4_state *state,
|
||||
unsigned idx);
|
||||
|
||||
@@ -316,6 +316,10 @@ static void si_shader_ps(struct si_shader *shader)
|
||||
|
||||
static void si_shader_init_pm4_state(struct si_shader *shader)
|
||||
{
|
||||
|
||||
if (shader->pm4)
|
||||
si_pm4_free_state_simple(shader->pm4);
|
||||
|
||||
switch (shader->selector->type) {
|
||||
case PIPE_SHADER_VERTEX:
|
||||
if (shader->key.vs.as_es)
|
||||
|
||||
Reference in New Issue
Block a user