diff --git a/wgpu-hal/src/gles/device.rs b/wgpu-hal/src/gles/device.rs index d6a20c22ac..b96f4f61ff 100644 --- a/wgpu-hal/src/gles/device.rs +++ b/wgpu-hal/src/gles/device.rs @@ -1041,9 +1041,8 @@ impl crate::Device for super::Device { unsafe fn start_capture(&self) -> bool { #[cfg(feature = "renderdoc")] { - //Note: it doesn't look like the device pointer is used by RD self.render_doc - .start_frame_capture(ptr::null_mut(), ptr::null_mut()) + .start_frame_capture(self.shared.context.egl_context.as_ptr(), ptr::null_mut()) } #[cfg(not(feature = "renderdoc"))] false diff --git a/wgpu-hal/src/gles/egl.rs b/wgpu-hal/src/gles/egl.rs index c91c1a2d3d..85295583c3 100644 --- a/wgpu-hal/src/gles/egl.rs +++ b/wgpu-hal/src/gles/egl.rs @@ -236,7 +236,7 @@ pub struct AdapterContext { glow_context: Mutex, egl: Arc>, egl_display: egl::Display, - egl_context: egl::Context, + pub(super) egl_context: egl::Context, egl_pbuffer: Option, } diff --git a/wgpu-hal/src/vulkan/device.rs b/wgpu-hal/src/vulkan/device.rs index 7d53ef8a3d..cb2cc1f9c0 100644 --- a/wgpu-hal/src/vulkan/device.rs +++ b/wgpu-hal/src/vulkan/device.rs @@ -1598,20 +1598,27 @@ impl crate::Device for super::Device { unsafe fn start_capture(&self) -> bool { #[cfg(feature = "renderdoc")] { - self.render_doc.start_frame_capture( - ash::vk::Handle::as_raw(self.shared.raw.handle()) as *mut _, - ptr::null_mut(), - ) + // Renderdoc requires us to give us the pointer that vkInstance _points to_. + let raw_vk_instance = + ash::vk::Handle::as_raw(self.shared.instance.raw.handle()) as *mut *mut _; + let raw_vk_instance_dispatch_table = *raw_vk_instance; + self.render_doc + .start_frame_capture(raw_vk_instance_dispatch_table, ptr::null_mut()) } #[cfg(not(feature = "renderdoc"))] false } unsafe fn stop_capture(&self) { #[cfg(feature = "renderdoc")] - self.render_doc.end_frame_capture( - ash::vk::Handle::as_raw(self.shared.raw.handle()) as *mut _, - ptr::null_mut(), - ) + { + // Renderdoc requires us to give us the pointer that vkInstance _points to_. + let raw_vk_instance = + ash::vk::Handle::as_raw(self.shared.instance.raw.handle()) as *mut *mut _; + let raw_vk_instance_dispatch_table = *raw_vk_instance; + + self.render_doc + .end_frame_capture(raw_vk_instance_dispatch_table, ptr::null_mut()) + } } }