diff options
author | David Riley <davidriley@chromium.org> | 2019-07-24 13:07:33 -0700 |
---|---|---|
committer | Commit Bot <commit-bot@chromium.org> | 2019-08-01 19:34:03 +0000 |
commit | 62c533c9a3c60a7fcee2d49d987f955b75a67c99 (patch) | |
tree | fe87d13b8d5d5d34b27c825551e8722b5d234279 | |
parent | 7cf768d02dd34aee39bf77d3524700cf1b629d8d (diff) | |
download | crosvm-62c533c9a3c60a7fcee2d49d987f955b75a67c99.tar crosvm-62c533c9a3c60a7fcee2d49d987f955b75a67c99.tar.gz crosvm-62c533c9a3c60a7fcee2d49d987f955b75a67c99.tar.bz2 crosvm-62c533c9a3c60a7fcee2d49d987f955b75a67c99.tar.lz crosvm-62c533c9a3c60a7fcee2d49d987f955b75a67c99.tar.xz crosvm-62c533c9a3c60a7fcee2d49d987f955b75a67c99.tar.zst crosvm-62c533c9a3c60a7fcee2d49d987f955b75a67c99.zip |
gpu_renderer: Make eglDebugMessageControlKHR usage optional.
BUG=chromium:892280 TEST=glxgears with virtio-gpu on kevin and nami Change-Id: I2158f4fe3411006ce5498b01d12ca627aa985f53 Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/crosvm/+/1717737 Reviewed-by: Zach Reizner <zachr@chromium.org> Tested-by: kokoro <noreply+kokoro@google.com> Tested-by: David Riley <davidriley@chromium.org> Commit-Queue: David Riley <davidriley@chromium.org> Auto-Submit: David Riley <davidriley@chromium.org>
-rw-r--r-- | gpu_renderer/src/lib.rs | 34 |
1 files changed, 20 insertions, 14 deletions
diff --git a/gpu_renderer/src/lib.rs b/gpu_renderer/src/lib.rs index 5311c82..908a83a 100644 --- a/gpu_renderer/src/lib.rs +++ b/gpu_renderer/src/lib.rs @@ -26,11 +26,12 @@ use data_model::{VolatileMemory, VolatileSlice}; use sys_util::{GuestAddress, GuestMemory}; use crate::generated::epoxy_egl::{ - EGLAttrib, EGLBoolean, EGLClientBuffer, EGLConfig, EGLContext, EGLDisplay, EGLImageKHR, - EGLNativeDisplayType, EGLSurface, EGLenum, EGLint, EGLuint64KHR, EGLDEBUGPROCKHR, - EGL_CONTEXT_CLIENT_VERSION, EGL_DMA_BUF_PLANE0_FD_EXT, EGL_DMA_BUF_PLANE0_OFFSET_EXT, - EGL_DMA_BUF_PLANE0_PITCH_EXT, EGL_GL_TEXTURE_2D_KHR, EGL_HEIGHT, EGL_LINUX_DMA_BUF_EXT, - EGL_LINUX_DRM_FOURCC_EXT, EGL_NONE, EGL_OPENGL_ES_API, EGL_SURFACE_TYPE, EGL_WIDTH, + epoxy_has_egl_extension, EGLAttrib, EGLBoolean, EGLClientBuffer, EGLConfig, EGLContext, + EGLDisplay, EGLImageKHR, EGLNativeDisplayType, EGLSurface, EGLenum, EGLint, EGLuint64KHR, + EGLDEBUGPROCKHR, EGL_CONTEXT_CLIENT_VERSION, EGL_DMA_BUF_PLANE0_FD_EXT, + EGL_DMA_BUF_PLANE0_OFFSET_EXT, EGL_DMA_BUF_PLANE0_PITCH_EXT, EGL_GL_TEXTURE_2D_KHR, EGL_HEIGHT, + EGL_LINUX_DMA_BUF_EXT, EGL_LINUX_DRM_FOURCC_EXT, EGL_NONE, EGL_OPENGL_ES_API, EGL_SURFACE_TYPE, + EGL_WIDTH, }; use crate::generated::p_defines::{ PIPE_BIND_RENDER_TARGET, PIPE_BIND_SAMPLER_VIEW, PIPE_TEXTURE_1D, PIPE_TEXTURE_2D, @@ -230,8 +231,9 @@ struct EGLFunctionsInner { buffer: EGLClientBuffer, attrib_list: *const EGLint, ) -> EGLImageKHR, - DebugMessageControlKHR: + DebugMessageControlKHR: Option< unsafe extern "C" fn(callback: EGLDEBUGPROCKHR, attrib_list: *const EGLAttrib) -> EGLint, + >, DestroyImageKHR: unsafe extern "C" fn(dpy: EGLDisplay, image: EGLImageKHR) -> EGLBoolean, ExportDRMImageMESA: unsafe extern "C" fn( dpy: EGLDisplay, @@ -285,8 +287,7 @@ impl EGLFunctions { .ok_or(Error::MissingEGLFunction("eglCreateContext"))?, CreateImageKHR: epoxy_eglCreateImageKHR .ok_or(Error::MissingEGLFunction("eglCreateImageKHR"))?, - DebugMessageControlKHR: epoxy_eglDebugMessageControlKHR - .ok_or(Error::MissingEGLFunction("eglDebugMessageControlKHR"))?, + DebugMessageControlKHR: epoxy_eglDebugMessageControlKHR, DestroyImageKHR: epoxy_eglDestroyImageKHR .ok_or(Error::MissingEGLFunction("eglDestroyImageKHR"))?, ExportDRMImageMESA: epoxy_eglExportDRMImageMESA @@ -319,18 +320,23 @@ impl Deref for EGLFunctions { fn init_egl() -> Result<(EGLDisplay, EGLFunctions)> { let egl_funcs = EGLFunctions::new()?; - // Safe because only valid callbacks are given and only one thread can execute this - // function. - unsafe { - (egl_funcs.DebugMessageControlKHR)(Some(error_callback), null()); - } - // Trivially safe. let display = unsafe { (egl_funcs.GetDisplay)(null_mut()) }; if display.is_null() { return Err(Error::EGLGetDisplay); } + // Safe because only valid callbacks are given and only one thread can execute this + // function. + unsafe { + const EXTENSION_NAME: &[u8] = b"EGL_KHR_debug\0"; + if epoxy_has_egl_extension(display, EXTENSION_NAME.as_ptr() as *const c_char) { + if let Some(debug_message_control) = egl_funcs.DebugMessageControlKHR { + debug_message_control(Some(error_callback), null()); + } + } + } + // Safe because only a valid display is given. let ret = unsafe { (egl_funcs.Initialize)(display, null_mut(), null_mut()) }; if ret == 0 { |