diff options
author | Hans-Kristian Arntzen <post@arntzen-software.no> | 2020-01-15 12:39:34 +0300 |
---|---|---|
committer | Hans-Kristian Arntzen <post@arntzen-software.no> | 2020-01-15 15:23:20 +0300 |
commit | b45e51fb5ad8f1de0b571e60fe5f3b02e9c1f6dc (patch) | |
tree | 27b4432bdca19ab2a18b8642783ab8b9a158a9a1 | |
parent | f4d874725cb5c079dddbaa95eb6cf90e92353afe (diff) |
vkd3d-shader: Add path for debug dumping SPIR-V as well.register-space-tests-rebase
Signed-off-by: Hans-Kristian Arntzen <post@arntzen-software.no>
-rw-r--r-- | libs/vkd3d-shader/vkd3d_shader_main.c | 35 |
1 files changed, 28 insertions, 7 deletions
diff --git a/libs/vkd3d-shader/vkd3d_shader_main.c b/libs/vkd3d-shader/vkd3d_shader_main.c index aa486cca..fb89de41 100644 --- a/libs/vkd3d-shader/vkd3d_shader_main.c +++ b/libs/vkd3d-shader/vkd3d_shader_main.c @@ -25,16 +25,13 @@ VKD3D_DEBUG_ENV_NAME("VKD3D_SHADER_DEBUG"); STATIC_ASSERT(MEMBER_SIZE(struct vkd3d_shader_scan_info, uav_counter_mask) * CHAR_BIT >= VKD3D_SHADER_MAX_UNORDERED_ACCESS_VIEWS); STATIC_ASSERT(MEMBER_SIZE(struct vkd3d_shader_scan_info, uav_read_mask) * CHAR_BIT >= VKD3D_SHADER_MAX_UNORDERED_ACCESS_VIEWS); -static void vkd3d_shader_dump_blob(const char *path, const char *prefix, const void *data, size_t size) +static void vkd3d_shader_dump_blob(const char *path, const char *prefix, const void *data, size_t size, + unsigned int id, const char *ext) { - static int shader_id = 0; char filename[1024]; - unsigned int id; FILE *f; - id = InterlockedIncrement(&shader_id) - 1; - - snprintf(filename, ARRAY_SIZE(filename), "%s/vkd3d-shader-%s-%u.dxbc", path, prefix, id); + snprintf(filename, ARRAY_SIZE(filename), "%s/vkd3d-shader-%s-%u.%s", path, prefix, id, ext); if ((f = fopen(filename, "wb"))) { if (fwrite(data, 1, size, f) != size) @@ -50,6 +47,26 @@ static void vkd3d_shader_dump_blob(const char *path, const char *prefix, const v static void vkd3d_shader_dump_shader(enum vkd3d_shader_type type, const struct vkd3d_shader_code *shader) { + static int shader_id = 0; + static bool enabled = true; + const char *path; + + if (!enabled) + return; + + if (!(path = getenv("VKD3D_SHADER_DUMP_PATH"))) + { + enabled = false; + return; + } + + vkd3d_shader_dump_blob(path, shader_get_type_prefix(type), shader->code, shader->size, + InterlockedIncrement(&shader_id) - 1, "dxbc"); +} + +static void vkd3d_shader_dump_spirv_shader(enum vkd3d_shader_type type, const struct vkd3d_shader_code *shader) +{ + static int shader_id = 0; static bool enabled = true; const char *path; @@ -62,7 +79,8 @@ static void vkd3d_shader_dump_shader(enum vkd3d_shader_type type, const struct v return; } - vkd3d_shader_dump_blob(path, shader_get_type_prefix(type), shader->code, shader->size); + vkd3d_shader_dump_blob(path, shader_get_type_prefix(type), shader->code, shader->size, + InterlockedIncrement(&shader_id) - 1, "spv"); } struct vkd3d_shader_parser @@ -190,6 +208,9 @@ int vkd3d_shader_compile_dxbc(const struct vkd3d_shader_code *dxbc, if (ret >= 0) ret = vkd3d_dxbc_compiler_generate_spirv(spirv_compiler, spirv); + if (ret == 0) + vkd3d_shader_dump_spirv_shader(parser.shader_version.type, spirv); + vkd3d_dxbc_compiler_destroy(spirv_compiler); vkd3d_shader_parser_destroy(&parser); return ret; |