vkd3d-shader/tpf: Implement semantics for domain shaders.

This commit is contained in:
Shaun Ren 2024-10-16 23:11:07 -04:00 committed by Henri Verbeet
parent 0273ff007b
commit abed6d9cb7
Notes: Henri Verbeet 2024-10-21 18:41:50 +02:00
Approved-by: Elizabeth Figura (@zfigura)
Approved-by: Henri Verbeet (@hverbeet)
Merge-Request: https://gitlab.winehq.org/wine/vkd3d/-/merge_requests/1194

View File

@ -3017,6 +3017,9 @@ bool sm4_register_from_semantic_name(const struct vkd3d_shader_version *version,
{"sv_groupid", false, VKD3D_SHADER_TYPE_COMPUTE, VKD3DSPR_THREADGROUPID, false},
{"sv_groupthreadid", false, VKD3D_SHADER_TYPE_COMPUTE, VKD3DSPR_LOCALTHREADID, false},
{"sv_domainlocation", false, VKD3D_SHADER_TYPE_DOMAIN, VKD3DSPR_TESSCOORD, false},
{"sv_primitiveid", false, VKD3D_SHADER_TYPE_DOMAIN, VKD3DSPR_PRIMID, false},
{"sv_primitiveid", false, VKD3D_SHADER_TYPE_GEOMETRY, VKD3DSPR_PRIMID, false},
{"sv_outputcontrolpointid", false, VKD3D_SHADER_TYPE_HULL, VKD3DSPR_OUTPOINTID, false},
@ -3115,6 +3118,12 @@ bool sm4_sysval_semantic_from_semantic_name(enum vkd3d_shader_sysval_semantic *s
{"sv_groupid", false, VKD3D_SHADER_TYPE_COMPUTE, ~0u},
{"sv_groupthreadid", false, VKD3D_SHADER_TYPE_COMPUTE, ~0u},
{"sv_domainlocation", false, VKD3D_SHADER_TYPE_DOMAIN, ~0u},
{"sv_position", false, VKD3D_SHADER_TYPE_DOMAIN, VKD3D_SHADER_SV_NONE},
{"sv_primitiveid", false, VKD3D_SHADER_TYPE_DOMAIN, ~0u},
{"sv_position", true, VKD3D_SHADER_TYPE_DOMAIN, VKD3D_SHADER_SV_POSITION},
{"position", false, VKD3D_SHADER_TYPE_GEOMETRY, VKD3D_SHADER_SV_POSITION},
{"sv_position", false, VKD3D_SHADER_TYPE_GEOMETRY, VKD3D_SHADER_SV_POSITION},
{"sv_primitiveid", false, VKD3D_SHADER_TYPE_GEOMETRY, VKD3D_SHADER_SV_PRIMITIVE_ID},
@ -3179,6 +3188,16 @@ bool sm4_sysval_semantic_from_semantic_name(enum vkd3d_shader_sysval_semantic *s
return false;
}
}
else if (version->type == VKD3D_SHADER_TYPE_DOMAIN)
{
if (!output)
{
if (!ascii_strcasecmp(semantic_name, "sv_tessfactor"))
return get_tessfactor_sysval_semantic(sysval_semantic, domain, semantic_idx);
if (!ascii_strcasecmp(semantic_name, "sv_insidetessfactor"))
return get_insidetessfactor_sysval_semantic(sysval_semantic, domain, semantic_idx);
}
}
for (i = 0; i < ARRAY_SIZE(semantics); ++i)
{