From 6894f581ab9e6946f460b9ae32d89254026df8a2 Mon Sep 17 00:00:00 2001 From: Lubos Date: Sat, 13 Jul 2024 22:39:00 +0200 Subject: [PATCH] OpenXR - Add FBO supersampling --- Common/VR/PPSSPPVR.cpp | 4 ++++ Common/VR/VRRenderer.cpp | 8 ++++---- Common/VR/VRRenderer.h | 3 +++ 3 files changed, 11 insertions(+), 4 deletions(-) diff --git a/Common/VR/PPSSPPVR.cpp b/Common/VR/PPSSPPVR.cpp index 173243fda9..dded201b05 100644 --- a/Common/VR/PPSSPPVR.cpp +++ b/Common/VR/PPSSPPVR.cpp @@ -160,10 +160,12 @@ void InitVROnAndroid(void* vm, void* activity, const char* system, int version, if (strcmp(vendor, "PICO") == 0) { VR_SetPlatformFLag(VR_PLATFORM_CONTROLLER_PICO, true); VR_SetPlatformFLag(VR_PLATFORM_EXTENSION_INSTANCE, true); + VR_SetConfigFloat(VR_CONFIG_VIEWPORT_SUPERSAMPLING, 1.0f); } else { VR_SetPlatformFLag(VR_PLATFORM_CONTROLLER_QUEST, true); VR_SetPlatformFLag(VR_PLATFORM_EXTENSION_PASSTHROUGH, true); VR_SetPlatformFLag(VR_PLATFORM_EXTENSION_PERFORMANCE, true); + VR_SetConfigFloat(VR_CONFIG_VIEWPORT_SUPERSAMPLING, 1.3f); } VR_SetPlatformFLag(VR_PLATFORM_RENDERER_VULKAN, (GPUBackend)g_Config.iGPUBackend == GPUBackend::VULKAN); @@ -432,6 +434,8 @@ void UpdateVRInput(bool haptics, float dp_xscale, float dp_yscale) { float speed = (cx + cy) / 2; float x = cx - tan(ToRadians(angles.y - VR_GetConfigFloat(VR_CONFIG_MENU_YAW))) * speed; float y = cy - tan(ToRadians(angles.x)) * speed * VR_GetConfigFloat(VR_CONFIG_CANVAS_ASPECT); + x *= VR_GetConfigFloat(VR_CONFIG_VIEWPORT_SUPERSAMPLING); + y *= VR_GetConfigFloat(VR_CONFIG_VIEWPORT_SUPERSAMPLING); //set renderer VR_SetConfig(VR_CONFIG_MOUSE_X, (int)x); diff --git a/Common/VR/VRRenderer.cpp b/Common/VR/VRRenderer.cpp index f95c4a462d..420f318eb3 100644 --- a/Common/VR/VRRenderer.cpp +++ b/Common/VR/VRRenderer.cpp @@ -131,6 +131,9 @@ void VR_GetResolution(engine_t* engine, int *pWidth, int *pHeight) { *pWidth = width; *pHeight = height; } + + *pWidth *= VR_GetConfigFloat(VR_CONFIG_VIEWPORT_SUPERSAMPLING); + *pHeight *= VR_GetConfigFloat(VR_CONFIG_VIEWPORT_SUPERSAMPLING); } void VR_Recenter(engine_t* engine) { @@ -239,10 +242,7 @@ void VR_InitRenderer( engine_t* engine ) { if (VR_GetPlatformFlag(VR_PLATFORM_RENDERER_VULKAN)) { vulkanContext = &engine->graphicsBindingVulkan; } - ovrRenderer_Create(engine->appState.Session, &engine->appState.Renderer, - engine->appState.ViewConfigurationView[0].recommendedImageRectWidth, - engine->appState.ViewConfigurationView[0].recommendedImageRectHeight, - vulkanContext); + ovrRenderer_Create(engine->appState.Session, &engine->appState.Renderer, eyeW, eyeH, vulkanContext); if (VR_GetPlatformFlag(VRPlatformFlag::VR_PLATFORM_EXTENSION_PASSTHROUGH)) { XrPassthroughCreateInfoFB ptci = {XR_TYPE_PASSTHROUGH_CREATE_INFO_FB}; diff --git a/Common/VR/VRRenderer.h b/Common/VR/VRRenderer.h index 6c86761730..a3534e1641 100644 --- a/Common/VR/VRRenderer.h +++ b/Common/VR/VRRenderer.h @@ -22,6 +22,9 @@ enum VRConfigFloat { VR_CONFIG_CANVAS_DISTANCE, VR_CONFIG_MENU_PITCH, VR_CONFIG_MENU_YAW, VR_CONFIG_RECENTER_YAW, VR_CONFIG_CANVAS_ASPECT, + //viewport setup + VR_CONFIG_VIEWPORT_SUPERSAMPLING, + VR_CONFIG_FLOAT_MAX };