radeonsi: always keep shader code, rodata, and relocs in memory
authorMarek Olšák <marek.olsak@amd.com>
Sun, 27 Dec 2015 22:35:08 +0000 (23:35 +0100)
committerMarek Olšák <marek.olsak@amd.com>
Thu, 7 Jan 2016 17:26:06 +0000 (18:26 +0100)
We won't compile shaders in draw calls, but we will concatenate shader
binaries according to states in draw calls, so keep the binaries.

Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
src/gallium/drivers/radeonsi/si_shader.c

index 9f6f3e1f4a67e83a5ea8d0dc6a0b2d05541bfefd..bcc9f658a7b2168400ccede5d424d8ae7cf9b0b1 100644 (file)
@@ -3907,14 +3907,9 @@ int si_compile_llvm(struct si_screen *sscreen, struct si_shader *shader,
                return r;
 
        FREE(shader->binary.config);
-       FREE(shader->binary.rodata);
        FREE(shader->binary.global_symbol_offsets);
-       if (shader->config.scratch_bytes_per_wave == 0) {
-               FREE(shader->binary.code);
-               FREE(shader->binary.relocs);
-               memset(&shader->binary, 0,
-                      offsetof(struct radeon_shader_binary, disasm_string));
-       }
+       shader->binary.config = NULL;
+       shader->binary.global_symbol_offsets = NULL;
        return r;
 }
 
@@ -4227,6 +4222,7 @@ void si_shader_destroy(struct si_shader *shader)
        r600_resource_reference(&shader->bo, NULL);
 
        FREE(shader->binary.code);
+       FREE(shader->binary.rodata);
        FREE(shader->binary.relocs);
        FREE(shader->binary.disasm_string);
 }