def getOutputDevice(self, textureType):
        """
        * Returns platform- and texture-type specific adapter identification so that applications and the
        compositor are creating textures and swap chains on the same GPU. If an error occurs the device
        will be set to 0.
        pInstance is an optional parameter that is required only when textureType is TextureType_Vulkan.
        [D3D10/11/12 Only (D3D9 Not Supported)]
         Returns the adapter LUID that identifies the GPU attached to the HMD. The user should
         enumerate all adapters using IDXGIFactory::EnumAdapters and IDXGIAdapter::GetDesc to find
         the adapter with the matching LUID, or use IDXGIFactory4::EnumAdapterByLuid.
         The discovered IDXGIAdapter should be used to create the device and swap chain.
        [Vulkan Only]
         Returns the VkPhysicalDevice that should be used by the application.
         pInstance must be the instance the application will use to query for the VkPhysicalDevice.  The application
         must create the VkInstance with extensions returned by IVRCompositor::GetVulkanInstanceExtensionsRequired enabled.
        [macOS Only]
         For TextureType_IOSurface returns the id<MTLDevice> that should be used by the application.
         On 10.13+ for TextureType_OpenGL returns the 'registryId' of the renderer which should be used
          by the application. See Apple Technical Q&A QA1168 for information on enumerating GL Renderers, and the
          new kCGLRPRegistryIDLow and kCGLRPRegistryIDHigh CGLRendererProperty values in the 10.13 SDK.
         Pre 10.13 for TextureType_OpenGL returns 0, as there is no dependable way to correlate the HMDs MTLDevice
          with a GL Renderer.
        """

        fn = self.function_table.getOutputDevice
        pnDevice = c_uint64()
        pInstance = VkInstance_T()
        fn(byref(pnDevice), textureType, byref(pInstance))
        return pnDevice.value, pInstance