Fix VK and GL renderdoc captures

This commit is contained in:
Connor Fitzgerald 2021-09-21 17:44:45 -04:00 committed by Dzmitry Malyshau
parent 4122444581
commit 99f03daf23
4 changed files with 21 additions and 11 deletions

View File

@ -1,5 +1,9 @@
# Change Log
### Unreleased
- GL & Vulkan:
- Fix renderdoc device pointers.
### wgpu-hal-0.10.7 (2021-09-14)
- Metal:
- fix stencil back-face state

View File

@ -1041,9 +1041,8 @@ impl crate::Device<super::Api> 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

View File

@ -236,7 +236,7 @@ pub struct AdapterContext {
glow_context: Mutex<glow::Context>,
egl: Arc<egl::DynamicInstance<egl::EGL1_4>>,
egl_display: egl::Display,
egl_context: egl::Context,
pub(super) egl_context: egl::Context,
egl_pbuffer: Option<egl::Surface>,
}

View File

@ -1535,20 +1535,27 @@ impl crate::Device<super::Api> 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())
}
}
}