mirror of
https://gitlab.winehq.org/wine/vkd3d.git
synced 2025-04-13 05:43:18 -07:00
vkd3d-shader/tpf: Support SV_RenderTargetArrayIndex/SV_ViewportArrayIndex sysvals in tessellation shaders.
This commit is contained in:
parent
05f8dd8273
commit
d3b32fefa3
Notes:
Henri Verbeet
2025-04-09 16:47:09 +02:00
Approved-by: Elizabeth Figura (@zfigura) Approved-by: Henri Verbeet (@hverbeet) Merge-Request: https://gitlab.winehq.org/wine/vkd3d/-/merge_requests/1444
@ -3116,8 +3116,12 @@ bool sm4_sysval_semantic_from_semantic_name(enum vkd3d_shader_sysval_semantic *s
|
|||||||
{"sv_domainlocation", false, VKD3D_SHADER_TYPE_DOMAIN, ~0u},
|
{"sv_domainlocation", false, VKD3D_SHADER_TYPE_DOMAIN, ~0u},
|
||||||
{"sv_position", false, VKD3D_SHADER_TYPE_DOMAIN, VKD3D_SHADER_SV_NONE},
|
{"sv_position", false, VKD3D_SHADER_TYPE_DOMAIN, VKD3D_SHADER_SV_NONE},
|
||||||
{"sv_primitiveid", false, VKD3D_SHADER_TYPE_DOMAIN, ~0u},
|
{"sv_primitiveid", false, VKD3D_SHADER_TYPE_DOMAIN, ~0u},
|
||||||
|
{"sv_rendertargetarrayindex", false, VKD3D_SHADER_TYPE_DOMAIN, VKD3D_SHADER_SV_NONE},
|
||||||
|
{"sv_viewportarrayindex", false, VKD3D_SHADER_TYPE_DOMAIN, VKD3D_SHADER_SV_NONE},
|
||||||
|
|
||||||
{"sv_position", true, VKD3D_SHADER_TYPE_DOMAIN, VKD3D_SHADER_SV_POSITION},
|
{"sv_position", true, VKD3D_SHADER_TYPE_DOMAIN, VKD3D_SHADER_SV_POSITION},
|
||||||
|
{"sv_rendertargetarrayindex", true, VKD3D_SHADER_TYPE_DOMAIN, VKD3D_SHADER_SV_RENDER_TARGET_ARRAY_INDEX},
|
||||||
|
{"sv_viewportarrayindex", true, VKD3D_SHADER_TYPE_DOMAIN, VKD3D_SHADER_SV_VIEWPORT_ARRAY_INDEX},
|
||||||
|
|
||||||
{"sv_primitiveid", false, VKD3D_SHADER_TYPE_GEOMETRY, VKD3D_SHADER_SV_PRIMITIVE_ID},
|
{"sv_primitiveid", false, VKD3D_SHADER_TYPE_GEOMETRY, VKD3D_SHADER_SV_PRIMITIVE_ID},
|
||||||
{"sv_gsinstanceid", false, VKD3D_SHADER_TYPE_GEOMETRY, ~0u},
|
{"sv_gsinstanceid", false, VKD3D_SHADER_TYPE_GEOMETRY, ~0u},
|
||||||
@ -3131,6 +3135,8 @@ bool sm4_sysval_semantic_from_semantic_name(enum vkd3d_shader_sysval_semantic *s
|
|||||||
{"sv_primitiveid", false, VKD3D_SHADER_TYPE_HULL, ~0u},
|
{"sv_primitiveid", false, VKD3D_SHADER_TYPE_HULL, ~0u},
|
||||||
|
|
||||||
{"sv_position", true, VKD3D_SHADER_TYPE_HULL, VKD3D_SHADER_SV_POSITION},
|
{"sv_position", true, VKD3D_SHADER_TYPE_HULL, VKD3D_SHADER_SV_POSITION},
|
||||||
|
{"sv_rendertargetarrayindex", true, VKD3D_SHADER_TYPE_HULL, VKD3D_SHADER_SV_RENDER_TARGET_ARRAY_INDEX},
|
||||||
|
{"sv_viewportarrayindex", true, VKD3D_SHADER_TYPE_HULL, VKD3D_SHADER_SV_VIEWPORT_ARRAY_INDEX},
|
||||||
|
|
||||||
{"position", false, VKD3D_SHADER_TYPE_PIXEL, VKD3D_SHADER_SV_POSITION},
|
{"position", false, VKD3D_SHADER_TYPE_PIXEL, VKD3D_SHADER_SV_POSITION},
|
||||||
{"sv_position", false, VKD3D_SHADER_TYPE_PIXEL, VKD3D_SHADER_SV_POSITION},
|
{"sv_position", false, VKD3D_SHADER_TYPE_PIXEL, VKD3D_SHADER_SV_POSITION},
|
||||||
@ -3164,6 +3170,10 @@ bool sm4_sysval_semantic_from_semantic_name(enum vkd3d_shader_sysval_semantic *s
|
|||||||
if (!ascii_strcasecmp(semantic_name, "sv_position")
|
if (!ascii_strcasecmp(semantic_name, "sv_position")
|
||||||
|| (semantic_compat_mapping && !ascii_strcasecmp(semantic_name, "position")))
|
|| (semantic_compat_mapping && !ascii_strcasecmp(semantic_name, "position")))
|
||||||
*sysval_semantic = VKD3D_SHADER_SV_POSITION;
|
*sysval_semantic = VKD3D_SHADER_SV_POSITION;
|
||||||
|
else if (!ascii_strcasecmp(semantic_name, "sv_rendertargetarrayindex"))
|
||||||
|
*sysval_semantic = VKD3D_SHADER_SV_RENDER_TARGET_ARRAY_INDEX;
|
||||||
|
else if (!ascii_strcasecmp(semantic_name, "sv_viewportarrayindex"))
|
||||||
|
*sysval_semantic = VKD3D_SHADER_SV_VIEWPORT_ARRAY_INDEX;
|
||||||
else if (has_sv_prefix)
|
else if (has_sv_prefix)
|
||||||
return false;
|
return false;
|
||||||
else
|
else
|
||||||
@ -3179,11 +3189,6 @@ bool sm4_sysval_semantic_from_semantic_name(enum vkd3d_shader_sysval_semantic *s
|
|||||||
return get_tessfactor_sysval_semantic(sysval_semantic, domain, semantic_idx);
|
return get_tessfactor_sysval_semantic(sysval_semantic, domain, semantic_idx);
|
||||||
if (!ascii_strcasecmp(semantic_name, "sv_insidetessfactor"))
|
if (!ascii_strcasecmp(semantic_name, "sv_insidetessfactor"))
|
||||||
return get_insidetessfactor_sysval_semantic(sysval_semantic, domain, semantic_idx);
|
return get_insidetessfactor_sysval_semantic(sysval_semantic, domain, semantic_idx);
|
||||||
if (!ascii_strcasecmp(semantic_name, "sv_position"))
|
|
||||||
{
|
|
||||||
*sysval_semantic = VKD3D_SHADER_SV_NONE;
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -3214,7 +3219,10 @@ bool sm4_sysval_semantic_from_semantic_name(enum vkd3d_shader_sysval_semantic *s
|
|||||||
&& (semantic_compat_mapping || has_sv_prefix)
|
&& (semantic_compat_mapping || has_sv_prefix)
|
||||||
&& version->type == semantics[i].shader_type)
|
&& version->type == semantics[i].shader_type)
|
||||||
{
|
{
|
||||||
*sysval_semantic = semantics[i].semantic;
|
if (is_patch_constant_func && output && semantics[i].semantic != ~0u)
|
||||||
|
*sysval_semantic = VKD3D_SHADER_SV_NONE;
|
||||||
|
else
|
||||||
|
*sysval_semantic = semantics[i].semantic;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user