summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTom Stellard <thomas.stellard@amd.com>2015-01-14 10:01:29 -0500
committerTom Stellard <thomas.stellard@amd.com>2015-01-20 09:55:43 -0500
commit5667aa58c49221a919526db08aab7da5bd2b3a5d (patch)
tree52522eb92a2eca84b2e12a9023ddae75c7d3a847
parentc4fd0c9052dd391d6f2e9bb8e6da209dfc7ef35b (diff)
radeon: Add a helper function for freeing members of radeon_shader_binary
-rw-r--r--src/gallium/drivers/radeon/radeon_elf_util.c6
-rw-r--r--src/gallium/drivers/radeon/radeon_elf_util.h5
-rw-r--r--src/gallium/drivers/radeonsi/si_compute.c4
-rw-r--r--src/gallium/drivers/radeonsi/si_shader.c4
4 files changed, 13 insertions, 6 deletions
diff --git a/src/gallium/drivers/radeon/radeon_elf_util.c b/src/gallium/drivers/radeon/radeon_elf_util.c
index ec39a89095..8cda57afff 100644
--- a/src/gallium/drivers/radeon/radeon_elf_util.c
+++ b/src/gallium/drivers/radeon/radeon_elf_util.c
@@ -161,3 +161,9 @@ const unsigned char *radeon_shader_binary_config_start(
}
return binary->config;
}
+
+void radeon_shader_binary_free_members(struct radeon_shader_binary *binary) {
+ FREE(binary->code);
+ FREE(binary->config);
+ FREE(binary->rodata);
+}
diff --git a/src/gallium/drivers/radeon/radeon_elf_util.h b/src/gallium/drivers/radeon/radeon_elf_util.h
index 8095e2f19e..ccac563831 100644
--- a/src/gallium/drivers/radeon/radeon_elf_util.h
+++ b/src/gallium/drivers/radeon/radeon_elf_util.h
@@ -46,4 +46,9 @@ const unsigned char *radeon_shader_binary_config_start(
const struct radeon_shader_binary *binary,
uint64_t symbol_offset);
+/**
+ * Free all memory allocated for members of \p binary. This function does
+ * not free \p binary.
+ */
+void radeon_shader_binary_free_members(struct radeon_shader_binary *binary);
#endif /* RADEON_ELF_UTIL_H */
diff --git a/src/gallium/drivers/radeonsi/si_compute.c b/src/gallium/drivers/radeonsi/si_compute.c
index 4b335bbf2f..f911e1f762 100644
--- a/src/gallium/drivers/radeonsi/si_compute.c
+++ b/src/gallium/drivers/radeonsi/si_compute.c
@@ -439,9 +439,7 @@ static void si_delete_compute_state(struct pipe_context *ctx, void* state){
pipe_resource_reference(
(struct pipe_resource **)&program->input_buffer, NULL);
- FREE(program->binary.code);
- FREE(program->binary.config);
- FREE(program->binary.rodata);
+ radeon_shader_binary_free_members(&program->binary);
FREE(program);
}
diff --git a/src/gallium/drivers/radeonsi/si_shader.c b/src/gallium/drivers/radeonsi/si_shader.c
index cf28860a35..a891bc651d 100644
--- a/src/gallium/drivers/radeonsi/si_shader.c
+++ b/src/gallium/drivers/radeonsi/si_shader.c
@@ -2621,9 +2621,7 @@ int si_compile_llvm(struct si_screen *sscreen, struct si_shader *shader,
return r;
}
r = si_shader_binary_read(sscreen, shader, &binary);
- FREE(binary.code);
- FREE(binary.config);
- FREE(binary.rodata);
+ radeon_shader_binary_free_members(&binary);
return r;
}