OpenXR: Use the XR_FB_foveation_vulkan extension to get the density map for VRS

This commit is contained in:
David Snopek 2024-11-27 10:34:48 -06:00
parent b13c96b097
commit 79f5a4d9fe
24 changed files with 178 additions and 18 deletions

View file

@ -1546,6 +1546,11 @@ RID OpenXRInterface::get_vrs_texture() {
return RID();
}
RID density_map = openxr_api->get_density_map_texture();
if (density_map.is_valid()) {
return density_map;
}
PackedVector2Array eye_foci;
Size2 target_size = get_render_target_size();
@ -1561,6 +1566,19 @@ RID OpenXRInterface::get_vrs_texture() {
return xr_vrs.make_vrs_texture(target_size, eye_foci);
}
XRInterface::VRSTextureFormat OpenXRInterface::get_vrs_texture_format() {
if (!openxr_api) {
return XR_VRS_TEXTURE_FORMAT_UNIFIED;
}
RID density_map = openxr_api->get_density_map_texture();
if (density_map.is_valid()) {
return XR_VRS_TEXTURE_FORMAT_FRAGMENT_DENSITY_MAP;
}
return XR_VRS_TEXTURE_FORMAT_UNIFIED;
}
void OpenXRInterface::set_cpu_level(PerfSettingsLevel p_level) {
OpenXRPerformanceSettingsExtension *performance_settings_ext = OpenXRPerformanceSettingsExtension::get_singleton();
if (performance_settings_ext && performance_settings_ext->is_available()) {