Module: Mesa Branch: main Commit: ed03821442d322bb328ce70ae67040ff7498c0a8 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=ed03821442d322bb328ce70ae67040ff7498c0a8
Author: Tatsuyuki Ishi <[email protected]> Date: Fri Feb 24 15:56:50 2023 +0900 radv/sqtt: Use code buffer from radv_shader directly instead of copying. The reference-counted radv_shader always outlives the pipeline, so we can use this buffer directly when dumping code objects to the trace. Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/21513> --- src/amd/vulkan/layers/radv_sqtt_layer.c | 19 +------------------ 1 file changed, 1 insertion(+), 18 deletions(-) diff --git a/src/amd/vulkan/layers/radv_sqtt_layer.c b/src/amd/vulkan/layers/radv_sqtt_layer.c index 61616ff75bf..a6c6eb6da8d 100644 --- a/src/amd/vulkan/layers/radv_sqtt_layer.c +++ b/src/amd/vulkan/layers/radv_sqtt_layer.c @@ -1122,25 +1122,17 @@ radv_add_code_object(struct radv_device *device, struct radv_pipeline *pipeline) for (unsigned i = 0; i < MESA_VULKAN_SHADER_STAGES; i++) { struct radv_shader *shader = pipeline->shaders[i]; - uint8_t *code; uint64_t va; if (!shader) continue; - code = malloc(shader->code_size); - if (!code) { - free(record); - return VK_ERROR_OUT_OF_HOST_MEMORY; - } - memcpy(code, shader->code, shader->code_size); - va = radv_sqtt_shader_get_va_reloc(pipeline, i); record->shader_data[i].hash[0] = (uint64_t)(uintptr_t)shader; record->shader_data[i].hash[1] = (uint64_t)(uintptr_t)shader >> 32; record->shader_data[i].code_size = shader->code_size; - record->shader_data[i].code = code; + record->shader_data[i].code = shader->code; record->shader_data[i].vgpr_count = shader->config.num_vgprs; record->shader_data[i].sgpr_count = shader->config.num_sgprs; record->shader_data[i].scratch_memory_size = shader->config.scratch_bytes_per_wave; @@ -1236,15 +1228,6 @@ radv_unregister_pipeline(struct radv_device *device, struct radv_pipeline *pipel list_for_each_entry_safe(struct rgp_code_object_record, record, &code_object->record, list) { if (record->pipeline_hash[0] == pipeline->pipeline_hash) { - uint32_t mask = record->shader_stages_mask; - int i; - - /* Free the disassembly. */ - while (mask) { - i = u_bit_scan(&mask); - free(record->shader_data[i].code); - } - code_object->record_count--; list_del(&record->list); free(record);
