vkd3d-shader: Report CS workgroup size metadata.

Signed-off-by: Hans-Kristian Arntzen <post@arntzen-software.no>
This commit is contained in:
Hans-Kristian Arntzen 2021-07-02 13:35:34 +02:00
parent 17fd01a2c8
commit 92c4f861e7
3 changed files with 8 additions and 0 deletions

View File

@ -57,6 +57,7 @@ typedef uint64_t vkd3d_shader_hash_t;
struct vkd3d_shader_meta
{
vkd3d_shader_hash_t hash;
uint32_t cs_workgroup_size[3]; /* Only contains valid data if uses_subgroup_size is true. */
bool replaced;
bool uses_subgroup_size;
};

View File

@ -498,6 +498,7 @@ int vkd3d_shader_compile_dxil(const struct vkd3d_shader_code *dxbc,
spirv->meta.replaced = false;
spirv->meta.hash = hash;
spirv->meta.uses_subgroup_size = false;
memset(spirv->meta.cs_workgroup_size, 0, sizeof(spirv->meta.cs_workgroup_size));
if (vkd3d_shader_replace(hash, &spirv->code, &spirv->size))
{
spirv->meta.replaced = true;
@ -786,6 +787,10 @@ int vkd3d_shader_compile_dxil(const struct vkd3d_shader_code *dxbc,
spirv->code = code;
spirv->size = compiled.size;
spirv->meta.uses_subgroup_size = dxil_spv_converter_uses_subgroup_size(converter) == DXIL_SPV_TRUE;
dxil_spv_converter_get_compute_workgroup_dimensions(converter,
&spirv->meta.cs_workgroup_size[0],
&spirv->meta.cs_workgroup_size[1],
&spirv->meta.cs_workgroup_size[2]);
vkd3d_shader_dump_spirv_shader(hash, spirv);
@ -826,6 +831,7 @@ int vkd3d_shader_compile_dxil_export(const struct vkd3d_shader_code *dxil,
spirv->meta.replaced = false;
spirv->meta.uses_subgroup_size = false;
spirv->meta.hash = hash;
memset(spirv->meta.cs_workgroup_size, 0, sizeof(spirv->meta.cs_workgroup_size));
demangled_export = vkd3d_dup_demangled_entry_point_ascii(export);
if (demangled_export)
{

View File

@ -347,6 +347,7 @@ int vkd3d_shader_compile_dxbc(const struct vkd3d_shader_code *dxbc,
spirv->meta.replaced = false;
spirv->meta.uses_subgroup_size = false;
spirv->meta.hash = hash;
memset(spirv->meta.cs_workgroup_size, 0, sizeof(spirv->meta.cs_workgroup_size));
if (vkd3d_shader_replace(hash, &spirv->code, &spirv->size))
{
spirv->meta.replaced = true;