From c1250fab3b88637496c851cf4925f28df6dbf2ca Mon Sep 17 00:00:00 2001 From: Josh Matthews Date: Tue, 25 Feb 2020 19:50:51 -0500 Subject: [PATCH 1/3] Create a real EGL surface when creating a surface from a texture. --- surfman/src/platform/windows/angle/surface.rs | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/surfman/src/platform/windows/angle/surface.rs b/surfman/src/platform/windows/angle/surface.rs index 227c36d..f30298d 100644 --- a/surfman/src/platform/windows/angle/surface.rs +++ b/surfman/src/platform/windows/angle/surface.rs @@ -128,7 +128,16 @@ impl Device { ]; EGL_FUNCTIONS.with(|egl| { - let egl_surface = if share_handle.is_some() { + let egl_surface = if let Some(HandleOrTexture::Texture(texture)) = share_handle { + let surface = + egl.CreatePbufferFromClientBuffer(self.native_display.egl_display(), + EGL_D3D_TEXTURE_ANGLE, + texture as *const _, + egl_config, + attributes.as_ptr()); + assert_ne!(surface, egl::NO_SURFACE); + surface + } else if share_handle.is_some() { egl::NO_SURFACE } else { let surface = egl.CreatePbufferSurface(self.native_display.egl_display(), From a1ffe3daebe1415f65901e46974f036c5f69b928 Mon Sep 17 00:00:00 2001 From: Josh Matthews Date: Wed, 4 Mar 2020 17:54:43 -0500 Subject: [PATCH 2/3] Make flush/finish configurable for ANGLE surfaces without a keyed mutex. --- surfman/Cargo.toml | 1 + surfman/src/platform/windows/angle/context.rs | 18 +++++++++++++++--- 2 files changed, 16 insertions(+), 3 deletions(-) diff --git a/surfman/Cargo.toml b/surfman/Cargo.toml index 2f61017..4e8d685 100644 --- a/surfman/Cargo.toml +++ b/surfman/Cargo.toml @@ -20,6 +20,7 @@ default = ["sm-winit"] sm-angle = [] sm-angle-builtin = ["mozangle"] sm-angle-default = ["sm-angle"] +sm-angle-flush = [] sm-osmesa = ["osmesa-sys"] sm-osmesa-default = ["sm-osmesa"] sm-no-wgl = ["sm-angle-default"] diff --git a/surfman/src/platform/windows/angle/context.rs b/surfman/src/platform/windows/angle/context.rs index b1ec974..21d8b52 100644 --- a/surfman/src/platform/windows/angle/context.rs +++ b/surfman/src/platform/windows/angle/context.rs @@ -37,6 +37,20 @@ thread_local! { pub static GL_FUNCTIONS: Gl = Gl::load_with(context::get_proc_address); } +#[cfg(feature = "sm-angle-flush")] +fn flush_surface_contents() { + unsafe { + GL_FUNCTIONS.with(|gl| gl.Flush()); + } +} + +#[cfg(not(feature = "sm-angle-flush"))] +fn flush_surface_contents() { + unsafe { + GL_FUNCTIONS.with(|gl| gl.Finish()); + } +} + pub struct Context { pub(crate) native_context: Box, pub(crate) id: ContextID, @@ -260,9 +274,7 @@ impl Device { // FIXME(pcwalton): Is this necessary and sufficient? if !surface.uses_keyed_mutex() { let _guard = self.temporarily_make_context_current(context)?; - unsafe { - GL_FUNCTIONS.with(|gl| gl.Finish()); - } + flush_surface_contents(); } let is_current = self.context_is_current(context); From e2d996951227ec4c7af2c037632600265827ac25 Mon Sep 17 00:00:00 2001 From: Josh Matthews Date: Wed, 4 Mar 2020 17:55:23 -0500 Subject: [PATCH 3/3] Publish 0.1.4. --- surfman/Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/surfman/Cargo.toml b/surfman/Cargo.toml index 4e8d685..34f2f9b 100644 --- a/surfman/Cargo.toml +++ b/surfman/Cargo.toml @@ -2,7 +2,7 @@ name = "surfman" license = "MIT / Apache-2.0" edition = "2018" -version = "0.1.3" +version = "0.1.4" authors = [ "Patrick Walton ", "Emilio Cobos Álvarez ",