spirv,nir: Add support for ray-tracing built-ins

Missing in this commit are NIR intrinsics for the ObjectToWorld and
WorldToObject built-ins.  Those are matrices and so they take a bit more
work and justify a separate commit.  For now, we add the enums and leave
the SYSTEM_VALUE <-> nir_intrinsic conversion commented out.

Reviewed-by: Bas Nieuwenhuizen <bas@basnieuwenhuizen.nl>
Reviewed-by: Caio Marcelo de Oliveira Filho <caio.oliveira@intel.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/6479>
This commit is contained in:
Jason Ekstrand
2020-05-13 13:56:03 -05:00
committed by Marge Bot
parent ed907e5d84
commit 46cd91bb45
5 changed files with 152 additions and 0 deletions

View File

@@ -1039,6 +1039,63 @@ vtn_get_builtin_location(struct vtn_builder *b,
*location = SYSTEM_VALUE_BARYCENTRIC_PULL_MODEL;
set_mode_system_value(b, mode);
break;
case SpvBuiltInLaunchIdKHR:
*location = SYSTEM_VALUE_RAY_LAUNCH_ID;
set_mode_system_value(b, mode);
break;
case SpvBuiltInLaunchSizeKHR:
*location = SYSTEM_VALUE_RAY_LAUNCH_SIZE;
set_mode_system_value(b, mode);
break;
case SpvBuiltInWorldRayOriginKHR:
*location = SYSTEM_VALUE_RAY_WORLD_ORIGIN;
set_mode_system_value(b, mode);
break;
case SpvBuiltInWorldRayDirectionKHR:
*location = SYSTEM_VALUE_RAY_WORLD_DIRECTION;
set_mode_system_value(b, mode);
break;
case SpvBuiltInObjectRayOriginKHR:
*location = SYSTEM_VALUE_RAY_OBJECT_ORIGIN;
set_mode_system_value(b, mode);
break;
case SpvBuiltInObjectRayDirectionKHR:
*location = SYSTEM_VALUE_RAY_OBJECT_DIRECTION;
set_mode_system_value(b, mode);
break;
case SpvBuiltInObjectToWorldKHR:
*location = SYSTEM_VALUE_RAY_OBJECT_TO_WORLD;
set_mode_system_value(b, mode);
break;
case SpvBuiltInWorldToObjectKHR:
*location = SYSTEM_VALUE_RAY_WORLD_TO_OBJECT;
set_mode_system_value(b, mode);
break;
case SpvBuiltInRayTminKHR:
*location = SYSTEM_VALUE_RAY_T_MIN;
set_mode_system_value(b, mode);
break;
case SpvBuiltInRayTmaxKHR:
case SpvBuiltInHitTNV:
*location = SYSTEM_VALUE_RAY_T_MAX;
set_mode_system_value(b, mode);
break;
case SpvBuiltInInstanceCustomIndexKHR:
*location = SYSTEM_VALUE_RAY_INSTANCE_CUSTOM_INDEX;
set_mode_system_value(b, mode);
break;
case SpvBuiltInHitKindKHR:
*location = SYSTEM_VALUE_RAY_HIT_KIND;
set_mode_system_value(b, mode);
break;
case SpvBuiltInIncomingRayFlagsKHR:
*location = SYSTEM_VALUE_RAY_FLAGS;
set_mode_system_value(b, mode);
break;
case SpvBuiltInRayGeometryIndexKHR:
*location = SYSTEM_VALUE_RAY_GEOMETRY_INDEX;
set_mode_system_value(b, mode);
break;
default:
vtn_fail("Unsupported builtin: %s (%u)",
spirv_builtin_to_string(builtin), builtin);