vkd3d-shader: Dump RT export SPIR-V.
Need one unique blob per export. Signed-off-by: Hans-Kristian Arntzen <post@arntzen-software.no>
This commit is contained in:
parent
3358fca922
commit
4f2776ff93
|
@ -27,6 +27,7 @@
|
|||
WCHAR *vkd3d_dup_entry_point(const char *str);
|
||||
WCHAR *vkd3d_dup_entry_point_n(const char *str, size_t len);
|
||||
WCHAR *vkd3d_dup_demangled_entry_point(const char *str);
|
||||
char *vkd3d_dup_demangled_entry_point_ascii(const char *str);
|
||||
|
||||
bool vkd3d_export_strequal(const WCHAR *a, const WCHAR *b);
|
||||
bool vkd3d_export_strequal_substr(const WCHAR *a, size_t n, const WCHAR *b);
|
||||
|
|
|
@ -126,7 +126,7 @@ static bool is_valid_identifier_character(char v)
|
|||
return (v >= 'a' && v <= 'z') || (v >= 'A' && v <= 'Z') || v == '_';
|
||||
}
|
||||
|
||||
WCHAR *vkd3d_dup_demangled_entry_point(const char *entry)
|
||||
static const char *vkd3d_manged_entry_point_scan(const char *entry, const char **out_end_entry)
|
||||
{
|
||||
const char *end_entry;
|
||||
|
||||
|
@ -140,5 +140,22 @@ WCHAR *vkd3d_dup_demangled_entry_point(const char *entry)
|
|||
if (entry == end_entry)
|
||||
return NULL;
|
||||
|
||||
*out_end_entry = end_entry;
|
||||
return entry;
|
||||
}
|
||||
|
||||
WCHAR *vkd3d_dup_demangled_entry_point(const char *entry)
|
||||
{
|
||||
const char *end_entry;
|
||||
if (!(entry = vkd3d_manged_entry_point_scan(entry, &end_entry)))
|
||||
return NULL;
|
||||
return vkd3d_dup_entry_point_n(entry, end_entry - entry);
|
||||
}
|
||||
|
||||
char *vkd3d_dup_demangled_entry_point_ascii(const char *entry)
|
||||
{
|
||||
const char *end_entry;
|
||||
if (!(entry = vkd3d_manged_entry_point_scan(entry, &end_entry)))
|
||||
return NULL;
|
||||
return vkd3d_strdup_n(entry, end_entry - entry);
|
||||
}
|
||||
|
|
|
@ -760,6 +760,7 @@ int vkd3d_shader_compile_dxil_export(const struct vkd3d_shader_code *dxil,
|
|||
dxil_spv_compiled_spirv compiled;
|
||||
unsigned int i, j, max_size;
|
||||
vkd3d_shader_hash_t hash;
|
||||
char *demangled_export;
|
||||
int ret = VKD3D_OK;
|
||||
void *code;
|
||||
|
||||
|
@ -1072,7 +1073,12 @@ int vkd3d_shader_compile_dxil_export(const struct vkd3d_shader_code *dxil,
|
|||
spirv->code = code;
|
||||
spirv->size = compiled.size;
|
||||
|
||||
vkd3d_shader_dump_spirv_shader(hash, spirv);
|
||||
demangled_export = vkd3d_dup_demangled_entry_point_ascii(export);
|
||||
if (demangled_export)
|
||||
{
|
||||
vkd3d_shader_dump_spirv_shader_export(hash, spirv, demangled_export);
|
||||
vkd3d_free(demangled_export);
|
||||
}
|
||||
|
||||
end:
|
||||
dxil_spv_converter_free(converter);
|
||||
|
|
|
@ -123,6 +123,26 @@ void vkd3d_shader_dump_spirv_shader(vkd3d_shader_hash_t hash, const struct vkd3d
|
|||
vkd3d_shader_dump_blob(path, hash, shader->code, shader->size, "spv");
|
||||
}
|
||||
|
||||
void vkd3d_shader_dump_spirv_shader_export(vkd3d_shader_hash_t hash, const struct vkd3d_shader_code *shader,
|
||||
const char *export)
|
||||
{
|
||||
static bool enabled = true;
|
||||
const char *path;
|
||||
char tag[1024];
|
||||
|
||||
if (!enabled)
|
||||
return;
|
||||
|
||||
if (!(path = getenv("VKD3D_SHADER_DUMP_PATH")))
|
||||
{
|
||||
enabled = false;
|
||||
return;
|
||||
}
|
||||
|
||||
snprintf(tag, sizeof(tag), "lib.%s.spv", export);
|
||||
vkd3d_shader_dump_blob(path, hash, shader->code, shader->size, tag);
|
||||
}
|
||||
|
||||
struct vkd3d_shader_parser
|
||||
{
|
||||
struct vkd3d_shader_desc shader_desc;
|
||||
|
|
|
@ -797,6 +797,8 @@ void vkd3d_dxbc_compiler_destroy(struct vkd3d_dxbc_compiler *compiler);
|
|||
void vkd3d_compute_dxbc_checksum(const void *dxbc, size_t size, uint32_t checksum[4]);
|
||||
|
||||
void vkd3d_shader_dump_spirv_shader(vkd3d_shader_hash_t hash, const struct vkd3d_shader_code *shader);
|
||||
void vkd3d_shader_dump_spirv_shader_export(vkd3d_shader_hash_t hash, const struct vkd3d_shader_code *shader,
|
||||
const char *export);
|
||||
void vkd3d_shader_dump_shader(vkd3d_shader_hash_t hash, const struct vkd3d_shader_code *shader, const char *ext);
|
||||
bool vkd3d_shader_replace(vkd3d_shader_hash_t hash, const void **data, size_t *size);
|
||||
|
||||
|
|
Loading…
Reference in New Issue