Browse Source

Merge pull request #106880 from dsnopek/meta-depth-api-nonhacks

Minor rendering and XR changes to allow Meta enivornment depth API to work entirely from GDExtension
Thaddeus Crews 3 months ago
parent
commit
167a9e33d3

+ 4 - 4
modules/openxr/openxr_api.cpp

@@ -2261,10 +2261,6 @@ void OpenXRAPI::pre_render() {
 		create_main_swapchains(swapchain_size);
 		create_main_swapchains(swapchain_size);
 	}
 	}
 
 
-	for (OpenXRExtensionWrapper *wrapper : registered_extension_wrappers) {
-		wrapper->on_pre_render();
-	}
-
 	void *view_locate_info_next_pointer = nullptr;
 	void *view_locate_info_next_pointer = nullptr;
 	for (OpenXRExtensionWrapper *extension : frame_info_extensions) {
 	for (OpenXRExtensionWrapper *extension : frame_info_extensions) {
 		void *np = extension->set_view_locate_info_and_get_next_pointer(view_locate_info_next_pointer);
 		void *np = extension->set_view_locate_info_and_get_next_pointer(view_locate_info_next_pointer);
@@ -2335,6 +2331,10 @@ void OpenXRAPI::pre_render() {
 
 
 	// Reset this, we haven't found a viewport for output yet
 	// Reset this, we haven't found a viewport for output yet
 	render_state.has_xr_viewport = false;
 	render_state.has_xr_viewport = false;
+
+	for (OpenXRExtensionWrapper *wrapper : registered_extension_wrappers) {
+		wrapper->on_pre_render();
+	}
 }
 }
 
 
 bool OpenXRAPI::pre_draw_viewport(RID p_render_target) {
 bool OpenXRAPI::pre_draw_viewport(RID p_render_target) {

+ 16 - 0
servers/rendering/renderer_rd/storage_rd/texture_storage.cpp

@@ -2655,6 +2655,22 @@ void TextureStorage::_texture_format_from_rd(RD::DataFormat p_rd_format, Texture
 			r_format.swizzle_b = RD::TEXTURE_SWIZZLE_B;
 			r_format.swizzle_b = RD::TEXTURE_SWIZZLE_B;
 			r_format.swizzle_a = RD::TEXTURE_SWIZZLE_A;
 			r_format.swizzle_a = RD::TEXTURE_SWIZZLE_A;
 		} break; // astc 8x8
 		} break; // astc 8x8
+		case RD::DATA_FORMAT_D16_UNORM: {
+			r_format.image_format = Image::FORMAT_RH;
+			r_format.rd_format = RD::DATA_FORMAT_D16_UNORM;
+			r_format.swizzle_r = RD::TEXTURE_SWIZZLE_R;
+			r_format.swizzle_g = RD::TEXTURE_SWIZZLE_G;
+			r_format.swizzle_b = RD::TEXTURE_SWIZZLE_B;
+			r_format.swizzle_a = RD::TEXTURE_SWIZZLE_A;
+		} break;
+		case RD::DATA_FORMAT_D32_SFLOAT: {
+			r_format.image_format = Image::FORMAT_RF;
+			r_format.rd_format = RD::DATA_FORMAT_D32_SFLOAT;
+			r_format.swizzle_r = RD::TEXTURE_SWIZZLE_R;
+			r_format.swizzle_g = RD::TEXTURE_SWIZZLE_G;
+			r_format.swizzle_b = RD::TEXTURE_SWIZZLE_B;
+			r_format.swizzle_a = RD::TEXTURE_SWIZZLE_A;
+		} break;
 
 
 		default: {
 		default: {
 			ERR_FAIL_MSG("Unsupported image format");
 			ERR_FAIL_MSG("Unsupported image format");

+ 0 - 3
servers/rendering/renderer_viewport.cpp

@@ -732,9 +732,6 @@ void RendererViewport::draw_viewports(bool p_swap_buffers) {
 	Ref<XRInterface> xr_interface;
 	Ref<XRInterface> xr_interface;
 	XRServer *xr_server = XRServer::get_singleton();
 	XRServer *xr_server = XRServer::get_singleton();
 	if (xr_server != nullptr) {
 	if (xr_server != nullptr) {
-		// let our XR server know we're about to render our frames so we can get our frame timing
-		xr_server->pre_render();
-
 		// retrieve the interface responsible for rendering
 		// retrieve the interface responsible for rendering
 		xr_interface = xr_server->get_primary_interface();
 		xr_interface = xr_server->get_primary_interface();
 	}
 	}

+ 9 - 1
servers/rendering/rendering_server_default.cpp

@@ -73,6 +73,15 @@ void RenderingServerDefault::_draw(bool p_swap_buffers, double frame_step) {
 	uint64_t time_usec = OS::get_singleton()->get_ticks_usec();
 	uint64_t time_usec = OS::get_singleton()->get_ticks_usec();
 
 
 	RENDER_TIMESTAMP("Prepare Render Frame");
 	RENDER_TIMESTAMP("Prepare Render Frame");
+
+#ifndef XR_DISABLED
+	XRServer *xr_server = XRServer::get_singleton();
+	if (xr_server != nullptr) {
+		// Let XR server know we're about to render a frame.
+		xr_server->pre_render();
+	}
+#endif // XR_DISABLED
+
 	RSG::scene->update(); //update scenes stuff before updating instances
 	RSG::scene->update(); //update scenes stuff before updating instances
 	RSG::canvas->update();
 	RSG::canvas->update();
 
 
@@ -88,7 +97,6 @@ void RenderingServerDefault::_draw(bool p_swap_buffers, double frame_step) {
 	RSG::rasterizer->end_frame(p_swap_buffers);
 	RSG::rasterizer->end_frame(p_swap_buffers);
 
 
 #ifndef XR_DISABLED
 #ifndef XR_DISABLED
-	XRServer *xr_server = XRServer::get_singleton();
 	if (xr_server != nullptr) {
 	if (xr_server != nullptr) {
 		// let our XR server know we're done so we can get our frame timing
 		// let our XR server know we're done so we can get our frame timing
 		xr_server->end_frame();
 		xr_server->end_frame();