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:
Brian Ho
2020-05-14 11:51:43 -07:00
committed by Marge Bot
parent ffc4d82438
commit d2d4677b56
2 changed files with 19 additions and 2 deletions
+5
View File
@@ -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. */
+14 -2
View File
@@ -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;