r600,compute: Plug few memory leaks
v2: drop inline keyword drop radeon_llvm_dispose_kernel_module wrapper v3: move definitions to .c file use in radeonsi Signed-off-by: Jan Vesely <jan.vesely@rutgers.edu> Signed-off-by: Marek Olšák <marek.olsak@amd.com>
This commit is contained in:
parent
e1dcd333e4
commit
efc4142acd
|
@ -225,7 +225,7 @@ void *evergreen_create_compute_state(
|
|||
}
|
||||
}
|
||||
#else
|
||||
memset(&shader->binary, 0, sizeof(shader->binary));
|
||||
radeon_shader_binary_init(&shader->binary);
|
||||
radeon_elf_read(code, header->num_bytes, &shader->binary);
|
||||
r600_create_shader(&shader->bc, &shader->binary, &use_kill);
|
||||
|
||||
|
@ -245,13 +245,31 @@ void *evergreen_create_compute_state(
|
|||
return shader;
|
||||
}
|
||||
|
||||
void evergreen_delete_compute_state(struct pipe_context *ctx, void* state)
|
||||
void evergreen_delete_compute_state(struct pipe_context *ctx_, void* state)
|
||||
{
|
||||
struct r600_pipe_compute *shader = (struct r600_pipe_compute *)state;
|
||||
struct r600_context *ctx = (struct r600_context *)ctx_;
|
||||
COMPUTE_DBG(ctx->screen, "*** evergreen_delete_compute_state\n");
|
||||
struct r600_pipe_compute *shader = state;
|
||||
|
||||
if (!shader)
|
||||
return;
|
||||
|
||||
#ifdef HAVE_OPENCL
|
||||
#if HAVE_LLVM < 0x0306
|
||||
for (unsigned i = 0; i < shader->num_kernels; i++) {
|
||||
struct r600_kernel *kernel = &shader->kernels[i];
|
||||
LLVMDisposeModule(module);
|
||||
}
|
||||
FREE(shader->kernels);
|
||||
LLVMContextDispose(shader->llvm_ctx);
|
||||
#else
|
||||
radeon_shader_binary_clean(&shader->binary);
|
||||
r600_destroy_shader(&shader->bc);
|
||||
|
||||
/* TODO destroy shader->code_bo, shader->const_bo
|
||||
* we'll need something like r600_buffer_free */
|
||||
#endif
|
||||
#endif
|
||||
FREE(shader);
|
||||
}
|
||||
|
||||
|
|
|
@ -910,6 +910,11 @@ unsigned r600_create_shader(struct r600_bytecode *bc,
|
|||
return 0;
|
||||
}
|
||||
|
||||
void r600_destroy_shader(struct r600_bytecode *bc)
|
||||
{
|
||||
FREE(bc->bytecode);
|
||||
}
|
||||
|
||||
unsigned r600_llvm_compile(
|
||||
LLVMModuleRef mod,
|
||||
enum radeon_family family,
|
||||
|
@ -922,17 +927,14 @@ unsigned r600_llvm_compile(
|
|||
struct radeon_shader_binary binary;
|
||||
const char * gpu_family = r600_get_llvm_processor_name(family);
|
||||
|
||||
memset(&binary, 0, sizeof(struct radeon_shader_binary));
|
||||
radeon_shader_binary_init(&binary);
|
||||
if (dump)
|
||||
LLVMDumpModule(mod);
|
||||
r = radeon_llvm_compile(mod, &binary, gpu_family, NULL, debug);
|
||||
|
||||
r = r600_create_shader(bc, &binary, use_kill);
|
||||
|
||||
FREE(binary.code);
|
||||
FREE(binary.config);
|
||||
FREE(binary.rodata);
|
||||
FREE(binary.global_symbol_offsets);
|
||||
radeon_shader_binary_clean(&binary);
|
||||
|
||||
return r;
|
||||
}
|
||||
|
|
|
@ -30,6 +30,8 @@ unsigned r600_create_shader(struct r600_bytecode *bc,
|
|||
const struct radeon_shader_binary *binary,
|
||||
boolean *use_kill);
|
||||
|
||||
void r600_destroy_shader(struct r600_bytecode *bc);
|
||||
|
||||
void r600_shader_binary_read_config(const struct radeon_shader_binary *binary,
|
||||
struct r600_bytecode *bc,
|
||||
uint64_t symbol_offset,
|
||||
|
|
|
@ -48,6 +48,26 @@ struct r600_multi_fence {
|
|||
struct pipe_fence_handle *sdma;
|
||||
};
|
||||
|
||||
/*
|
||||
* shader binary helpers.
|
||||
*/
|
||||
void radeon_shader_binary_init(struct radeon_shader_binary *b)
|
||||
{
|
||||
memset(b, 0, sizeof(*b));
|
||||
}
|
||||
|
||||
void radeon_shader_binary_clean(struct radeon_shader_binary *b)
|
||||
{
|
||||
if (!b)
|
||||
return;
|
||||
FREE(b->code);
|
||||
FREE(b->config);
|
||||
FREE(b->rodata);
|
||||
FREE(b->global_symbol_offsets);
|
||||
FREE(b->relocs);
|
||||
FREE(b->disasm_string);
|
||||
}
|
||||
|
||||
/*
|
||||
* pipe_context
|
||||
*/
|
||||
|
|
|
@ -129,6 +129,9 @@ struct radeon_shader_binary {
|
|||
char *disasm_string;
|
||||
};
|
||||
|
||||
void radeon_shader_binary_init(struct radeon_shader_binary *b);
|
||||
void radeon_shader_binary_clean(struct radeon_shader_binary *b);
|
||||
|
||||
struct r600_resource {
|
||||
struct u_resource b;
|
||||
|
||||
|
|
|
@ -461,9 +461,6 @@ static void si_delete_compute_state(struct pipe_context *ctx, void* state){
|
|||
LLVMContextDispose(program->llvm_ctx);
|
||||
}
|
||||
#else
|
||||
FREE(program->shader.binary.config);
|
||||
FREE(program->shader.binary.rodata);
|
||||
FREE(program->shader.binary.global_symbol_offsets);
|
||||
si_shader_destroy(&program->shader);
|
||||
#endif
|
||||
|
||||
|
|
|
@ -4423,14 +4423,6 @@ out:
|
|||
return r;
|
||||
}
|
||||
|
||||
void si_shader_destroy_binary(struct radeon_shader_binary *binary)
|
||||
{
|
||||
FREE(binary->code);
|
||||
FREE(binary->rodata);
|
||||
FREE(binary->relocs);
|
||||
FREE(binary->disasm_string);
|
||||
}
|
||||
|
||||
void si_shader_destroy(struct si_shader *shader)
|
||||
{
|
||||
if (shader->gs_copy_shader) {
|
||||
|
@ -4442,5 +4434,6 @@ void si_shader_destroy(struct si_shader *shader)
|
|||
r600_resource_reference(&shader->scratch_bo, NULL);
|
||||
|
||||
r600_resource_reference(&shader->bo, NULL);
|
||||
si_shader_destroy_binary(&shader->binary);
|
||||
|
||||
radeon_shader_binary_clean(&shader->binary);
|
||||
}
|
||||
|
|
|
@ -345,7 +345,6 @@ int si_compile_llvm(struct si_screen *sscreen,
|
|||
struct pipe_debug_callback *debug,
|
||||
unsigned processor);
|
||||
void si_shader_destroy(struct si_shader *shader);
|
||||
void si_shader_destroy_binary(struct radeon_shader_binary *binary);
|
||||
unsigned si_shader_io_get_unique_index(unsigned semantic_name, unsigned index);
|
||||
int si_shader_binary_upload(struct si_screen *sscreen, struct si_shader *shader);
|
||||
void si_shader_dump(struct si_screen *sscreen, struct si_shader *shader,
|
||||
|
|
Loading…
Reference in New Issue