Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/HansKristian-Work/vkd3d-proton.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHans-Kristian Arntzen <post@arntzen-software.no>2020-01-15 12:39:34 +0300
committerHans-Kristian Arntzen <post@arntzen-software.no>2020-01-15 15:23:20 +0300
commitb45e51fb5ad8f1de0b571e60fe5f3b02e9c1f6dc (patch)
tree27b4432bdca19ab2a18b8642783ab8b9a158a9a1
parentf4d874725cb5c079dddbaa95eb6cf90e92353afe (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.c35
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;