From 3e1d847d370c3773d4c3fd31fb8d1045299e8efb Mon Sep 17 00:00:00 2001 From: Faith Ekstrand Date: Tue, 27 Aug 2024 10:17:30 -0500 Subject: [PATCH] radv: Use the SPIR-V printer in spirv_to_nir Reviewed-by: Samuel Pitoiset Part-of: --- src/amd/vulkan/radv_debug.c | 29 ++--------------------------- src/amd/vulkan/radv_debug.h | 2 -- src/amd/vulkan/radv_shader.c | 2 +- 3 files changed, 3 insertions(+), 30 deletions(-) diff --git a/src/amd/vulkan/radv_debug.c b/src/amd/vulkan/radv_debug.c index 838fd0aacf4..39aaee48bd6 100644 --- a/src/amd/vulkan/radv_debug.c +++ b/src/amd/vulkan/radv_debug.c @@ -27,6 +27,7 @@ #include "radv_pipeline_rt.h" #include "radv_shader.h" #include "sid.h" +#include "spirv/nir_spirv.h" #define TMA_BO_SIZE 4096 @@ -389,7 +390,7 @@ radv_dump_shader(struct radv_device *device, struct radv_pipeline *pipeline, str _mesa_sha1_format(sha1buf, sha1); if (device->vk.enabled_features.deviceFaultVendorBinary) { - radv_print_spirv(shader->spirv, shader->spirv_size, f); + spirv_print_asm(f, (const uint32_t *)shader->spirv, shader->spirv_size / 4); } else { fprintf(f, "SPIRV (see %s.spv)\n\n", sha1buf); radv_dump_spirv(shader, sha1buf, dump_dir); @@ -871,32 +872,6 @@ radv_check_gpu_hangs(struct radv_queue *queue, const struct radv_winsys_submit_i return VK_ERROR_DEVICE_LOST; } -void -radv_print_spirv(const char *data, uint32_t size, FILE *fp) -{ -#ifndef _WIN32 - char path[] = "/tmp/fileXXXXXX"; - char command[128]; - int fd; - - /* Dump the binary into a temporary file. */ - fd = mkstemp(path); - if (fd < 0) - return; - - if (write(fd, data, size) == -1) - goto fail; - - /* Disassemble using spirv-dis if installed. */ - sprintf(command, "spirv-dis %s", path); - radv_dump_cmd(command, fp); - -fail: - close(fd); - unlink(path); -#endif -} - bool radv_trap_handler_init(struct radv_device *device) { diff --git a/src/amd/vulkan/radv_debug.h b/src/amd/vulkan/radv_debug.h index 596b772138c..e874d2a190b 100644 --- a/src/amd/vulkan/radv_debug.h +++ b/src/amd/vulkan/radv_debug.h @@ -86,8 +86,6 @@ void radv_finish_trace(struct radv_device *device); VkResult radv_check_gpu_hangs(struct radv_queue *queue, const struct radv_winsys_submit_info *submit_info); -void radv_print_spirv(const char *data, uint32_t size, FILE *fp); - void radv_dump_enabled_options(const struct radv_device *device, FILE *f); bool radv_trap_handler_init(struct radv_device *device); diff --git a/src/amd/vulkan/radv_shader.c b/src/amd/vulkan/radv_shader.c index eb138dadb9f..da26148b4b4 100644 --- a/src/amd/vulkan/radv_shader.c +++ b/src/amd/vulkan/radv_shader.c @@ -331,7 +331,7 @@ radv_shader_spirv_to_nir(struct radv_device *device, const struct radv_shader_st bool dump_meta = instance->debug_flags & RADV_DEBUG_DUMP_META_SHADERS; if ((instance->debug_flags & RADV_DEBUG_DUMP_SPIRV) && (!is_internal || dump_meta)) - radv_print_spirv(stage->spirv.data, stage->spirv.size, stderr); + spirv_print_asm(stderr, (const uint32_t *)stage->spirv.data, stage->spirv.size / 4); uint32_t num_spec_entries = 0; struct nir_spirv_specialization *spec_entries = vk_spec_info_to_nir_spirv(stage->spec_info, &num_spec_entries);