diff options
author | Martin Robinson <mrobinson@igalia.com> | 2023-06-26 16:35:03 +0200 |
---|---|---|
committer | Martin Robinson <mrobinson@igalia.com> | 2023-06-27 11:39:52 +0200 |
commit | ec3b2826ae7f9186e20e7a992f8be70c9aa2f903 (patch) | |
tree | 76b0ed5a9a48b1bde9418e1819481caae1e91dde /components/canvas/webgl_mode | |
parent | 234d50723463159400ee4bf25fa130011e9f72ef (diff) | |
download | servo-ec3b2826ae7f9186e20e7a992f8be70c9aa2f903.tar.gz servo-ec3b2826ae7f9186e20e7a992f8be70c9aa2f903.zip |
Remove the DOMToTexture feature
This relies on WebRender's frame output API, `set_output_image_handler`,
which has been removed from the latest upstream [1]. It's sad to remove
this feature, which was probably a lot of work to implement, but it
seems difficult to patch WebRender to restore this functionality.
Fixes #29936.
1. https://hg.mozilla.org/mozilla-central/rev/361521e3c52324809553c555fb066d50f023d9bf
Diffstat (limited to 'components/canvas/webgl_mode')
-rw-r--r-- | components/canvas/webgl_mode/inprocess.rs | 53 |
1 files changed, 0 insertions, 53 deletions
diff --git a/components/canvas/webgl_mode/inprocess.rs b/components/canvas/webgl_mode/inprocess.rs index ca9188aee54..64180b47930 100644 --- a/components/canvas/webgl_mode/inprocess.rs +++ b/components/canvas/webgl_mode/inprocess.rs @@ -7,12 +7,8 @@ use canvas_traits::webgl::webgl_channel; use canvas_traits::webgl::{WebGLContextId, WebGLMsg, WebGLThreads}; use euclid::default::Size2D; use fnv::FnvHashMap; -use gleam; -use servo_config::pref; -use sparkle::gl; use sparkle::gl::GlType; use std::default::Default; -use std::rc::Rc; use std::sync::{Arc, Mutex}; use surfman::Device; use surfman::SurfaceInfo; @@ -30,7 +26,6 @@ use webxr_api::LayerGrandManager as WebXRLayerGrandManager; pub struct WebGLComm { pub webgl_threads: WebGLThreads, pub image_handler: Box<dyn WebrenderExternalImageApi>, - pub output_handler: Option<Box<dyn webrender_api::OutputImageHandler>>, pub webxr_layer_grand_manager: WebXRLayerGrandManager<WebXRSurfman>, } @@ -38,7 +33,6 @@ impl WebGLComm { /// Creates a new `WebGLComm` object. pub fn new( surfman: WebrenderSurfman, - webrender_gl: Rc<dyn gleam::gl::Gl>, webrender_api_sender: webrender_api::RenderApiSender, webrender_doc: webrender_api::DocumentId, external_images: Arc<Mutex<WebrenderExternalImageRegistry>>, @@ -64,12 +58,6 @@ impl WebGLComm { webxr_init, }; - let output_handler = if pref!(dom.webgl.dom_to_texture.enabled) { - Some(Box::new(OutputHandler::new(webrender_gl.clone()))) - } else { - None - }; - let external = WebGLExternalImages::new(surfman, webrender_swap_chains); WebGLThread::run_on_own_thread(init); @@ -77,7 +65,6 @@ impl WebGLComm { WebGLComm { webgl_threads: WebGLThreads(sender), image_handler: Box::new(external), - output_handler: output_handler.map(|b| b as Box<_>), webxr_layer_grand_manager: webxr_layer_grand_manager, } } @@ -144,43 +131,3 @@ impl WebrenderExternalImageApi for WebGLExternalImages { self.unlock_swap_chain(id); } } - -/// struct used to implement DOMToTexture feature and webrender::OutputImageHandler trait. -struct OutputHandler { - webrender_gl: Rc<dyn gleam::gl::Gl>, - sync_objects: FnvHashMap<webrender_api::PipelineId, gleam::gl::GLsync>, -} - -impl OutputHandler { - fn new(webrender_gl: Rc<dyn gleam::gl::Gl>) -> Self { - OutputHandler { - webrender_gl, - sync_objects: Default::default(), - } - } -} - -/// Bridge between the WR frame outputs and WebGL to implement DOMToTexture synchronization. -impl webrender_api::OutputImageHandler for OutputHandler { - fn lock( - &mut self, - id: webrender_api::PipelineId, - ) -> Option<(u32, webrender_api::units::FramebufferIntSize)> { - // Insert a fence in the WR command queue - let gl_sync = self - .webrender_gl - .fence_sync(gl::SYNC_GPU_COMMANDS_COMPLETE, 0); - self.sync_objects.insert(id, gl_sync); - // https://github.com/servo/servo/issues/24615 - None - } - - fn unlock(&mut self, id: webrender_api::PipelineId) { - if let Some(gl_sync) = self.sync_objects.remove(&id) { - // Flush the Sync object into the GPU's command queue to guarantee that it it's signaled. - self.webrender_gl.flush(); - // Mark the sync object for deletion. - self.webrender_gl.delete_sync(gl_sync); - } - } -} |