nir: Support sysval tess levels in SPIR-V to NIR
This commit adds a tess_levels_are_sysvals flag to spirv_to_nir_options similar to GLSLTessLevelsAsInputs in the GLSL to NIR compiler options. This will be used by turnip as the tess IR3 lowering pass (ir3_nir_lower_tess) operates on TessLevelInner and TessLevelOuter in the DS as sysvals. Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/5059>
This commit is contained in:
@@ -64,6 +64,11 @@ struct spirv_to_nir_options {
|
||||
*/
|
||||
bool frag_coord_is_sysval;
|
||||
|
||||
/* Whether to lower TessLevelInner and TessLevelOuter to system values.
|
||||
* This is the inverse of GLSLTessLevelsAsInputs in GLSL.
|
||||
*/
|
||||
bool tess_levels_are_sysvals;
|
||||
|
||||
struct spirv_supported_capabilities caps;
|
||||
|
||||
/* Address format for various kinds of pointers. */
|
||||
|
||||
@@ -1354,10 +1354,22 @@ vtn_get_builtin_location(struct vtn_builder *b,
|
||||
vtn_fail("invalid stage for SpvBuiltInViewportIndex");
|
||||
break;
|
||||
case SpvBuiltInTessLevelOuter:
|
||||
*location = VARYING_SLOT_TESS_LEVEL_OUTER;
|
||||
if (b->options && b->options->tess_levels_are_sysvals &&
|
||||
*mode == nir_var_shader_in) {
|
||||
*location = SYSTEM_VALUE_TESS_LEVEL_OUTER;
|
||||
set_mode_system_value(b, mode);
|
||||
} else {
|
||||
*location = VARYING_SLOT_TESS_LEVEL_OUTER;
|
||||
}
|
||||
break;
|
||||
case SpvBuiltInTessLevelInner:
|
||||
*location = VARYING_SLOT_TESS_LEVEL_INNER;
|
||||
if (b->options && b->options->tess_levels_are_sysvals &&
|
||||
*mode == nir_var_shader_in) {
|
||||
*location = SYSTEM_VALUE_TESS_LEVEL_INNER;
|
||||
set_mode_system_value(b, mode);
|
||||
} else {
|
||||
*location = VARYING_SLOT_TESS_LEVEL_INNER;
|
||||
}
|
||||
break;
|
||||
case SpvBuiltInTessCoord:
|
||||
*location = SYSTEM_VALUE_TESS_COORD;
|
||||
|
||||
Reference in New Issue
Block a user