Add a helper macro for obtaining renderdoc's handle from VkInstance

* Since other layers could wrap renderdoc has to use the dispatch table
  pointer as the unique identifier for API calls, not the VkInstance
  directly.
This commit is contained in:
baldurk
2017-10-23 13:43:38 +01:00
parent fe35c4e033
commit 9a3ece6a01
2 changed files with 10 additions and 1 deletions
+1 -1
View File
@@ -320,7 +320,7 @@ The path follows the template set in :cpp:func:`SetLogFilePathTemplate` so it ma
* For D3D11 it must be the ``ID3D11Device`` device object.
* For OpenGL it must be the ``HGLRC`` or ``GLXContext`` context object.
* For Vulkan it must be the dispatch table pointer within the ``VkInstance``. This is a pointer-sized value at the location pointed to by the ``VkInstance``. NOTE - this is not the actual ``VkInstance`` pointer itself.
* For Vulkan it must be the dispatch table pointer within the ``VkInstance``. This is a pointer-sized value at the location pointed to by the ``VkInstance``. NOTE - this is not the actual ``VkInstance`` pointer itself. You can use the RENDERDOC_DEVICEPOINTER_FROM_VKINSTANCE helper macro defined in the renderdoc header to obtain this pointer from any VkInstance.
``RENDERDOC_WindowHandle`` is a typedef to ``void *``. It is the platform specific ``HWND``, ``xcb_window_t``, or Xlib ``Window``.
+9
View File
@@ -422,6 +422,15 @@ typedef void *RENDERDOC_DevicePointer;
// This would be an HWND, GLXDrawable, etc
typedef void *RENDERDOC_WindowHandle;
// A helper macro for Vulkan, where the device handle cannot be used directly.
//
// Passing the VkInstance to this macro will return the RENDERDOC_DevicePointer to use.
//
// Specifically, the value needed is the dispatch table pointer, which sits as the first
// pointer-sized object in the memory pointed to by the VkInstance. Thus we cast to a void** and
// indirect once.
#define RENDERDOC_DEVICEPOINTER_FROM_VKINSTANCE(inst) (*((void **)(inst)))
// This sets the RenderDoc in-app overlay in the API/window pair as 'active' and it will
// respond to keypresses. Neither parameter can be NULL
typedef void(RENDERDOC_CC *pRENDERDOC_SetActiveWindow)(RENDERDOC_DevicePointer device,