vkd3d-shader: Implement parsing of root signature 1.1.

Signed-off-by: Józef Kucia <jkucia@codeweavers.com>
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
Józef Kucia
2019-04-19 11:07:31 +02:00
committed by Alexandre Julliard
parent 8df50592f6
commit f9b9ae8cc7
4 changed files with 370 additions and 57 deletions

View File

@@ -344,6 +344,41 @@ void vkd3d_shader_free_root_signature(struct vkd3d_root_signature_desc *root_sig
memset(root_signature, 0, sizeof(*root_signature));
}
void vkd3d_shader_free_versioned_root_signature(struct vkd3d_versioned_root_signature_desc *desc)
{
struct vkd3d_root_signature_desc1 *root_signature;
unsigned int i;
if (!desc->version)
return;
if (desc->version == VKD3D_ROOT_SIGNATURE_VERSION_1_0)
{
vkd3d_shader_free_root_signature(&desc->u.v_1_0);
return;
}
if (desc->version != VKD3D_ROOT_SIGNATURE_VERSION_1_1)
{
FIXME("Unknown version %#x.\n", desc->version);
return;
}
root_signature = &desc->u.v_1_1;
for (i = 0; i < root_signature->parameter_count; ++i)
{
const struct vkd3d_root_parameter1 *parameter = &root_signature->parameters[i];
if (parameter->parameter_type == VKD3D_ROOT_PARAMETER_TYPE_DESCRIPTOR_TABLE)
vkd3d_free((void *)parameter->u.descriptor_table.descriptor_ranges);
}
vkd3d_free((void *)root_signature->parameters);
vkd3d_free((void *)root_signature->static_samplers);
memset(root_signature, 0, sizeof(*root_signature));
}
int vkd3d_shader_parse_input_signature(const struct vkd3d_shader_code *dxbc,
struct vkd3d_shader_signature *signature)
{