facebook/igl

`useSinglePassStereo =` set to `true` and `false` create different and incorrect output on Simulated HMD Windows Monado

Closed this issue · 7 comments

Application useSinglePassStereo == true useSinglePassStereo == false
ColorSession_vulkan_openxr Left eye correct. Right eye black Both eyes correct
HelloOpenXRSession_vulkan_openxr Left eye red only, right eye full color Both eyes red only
Textured3DCubeSession_vulkan_openxr Left eye correct. Right eye black Both eyes present
 Device info:
        name: NVIDIA RTX A2000
        vendor: 0x10de
        product: 0x2531
        deviceType: VK_PHYSICAL_DEVICE_TYPE_DISCRETE_GPU
        apiVersion: 1.3.242
        driverVersion: 0x8683c000

Not sure if this correlates, but repeating image layout errors are reported (examples below).

ERROR:
Validation layer:
 Validation Error: UNASSIGNED-CoreValidation-DrawState-InvalidImageLayout
 Object 0: handle = 000001FCAFCD6040, type = VK_OBJECT_TYPE_COMMAND_BUFFER;
 MessageID = 0000000000000000
 vkQueueSubmit(): pSubmits[0].pCommandBuffers[0] command buffer VkCommandBuffer 0x1fcafcd6040[] expects VkImage 0xfcda0e00000001e0[Image: macbeth.png] (subresource: aspectMask 0x1 array layer 0, mip level 2) to be in layout VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL--instead, current layout is VK_IMAGE_LAYOUT_UNDEFINED.
ERROR:
Validation layer:
 Validation Error: UNASSIGNED-CoreValidation-DrawState-InvalidImageLayout
 Object 0: handle = 000001B804928A00, type = VK_OBJECT_TYPE_COMMAND_BUFFER;
 MessageID = 0000000000000000
 vkQueueSubmit(): pSubmits[0].pCommandBuffers[0] command buffer VkCommandBuffer 0x1b804928a00[] expects VkImage 0xc32cbd00000001eb[Image: swapchain #1] (subresource: aspectMask 0x1 array layer 1, mip level 0) to be in layout VK_IMAGE_LAYOUT_PRESENT_SRC_KHR--instead, current layout is VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL.
ERROR:
Validation layer:
 Validation Error: UNASSIGNED-CoreValidation-DrawState-InvalidImageLayout
 Object 0: handle = 000001B8049F1320, type = VK_OBJECT_TYPE_COMMAND_BUFFER;
 MessageID = 0000000000000000
 vkQueueSubmit(): pSubmits[0].pCommandBuffers[0] command buffer VkCommandBuffer 0x1b8049f1320[] expects VkImage 0xc32cbd00000001eb[Image: swapchain #1] (subresource: aspectMask 0x1 array layer 1, mip level 0) to be in layout VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL--instead, current layout is VK_IMAGE_LAYOUT_PRESENT_SRC_KHR.

Hey @jzulauf-lunarg ! Thanks for reporting! ColorSession and Textured3DCubeSession are nit adapted for OpenXR, please check sessions with OpenXR in the title to be sure that are adapted for the headset (or simulator).
I'll check out what happened with HelloOpenXRSession_vulkan_openxr

@rokuz -- note the application titles in the table above (ColorSession_vulkan_openxr, HelloOpenXRSession_vulkan_openxr, Textured3DCubeSession_vulkan_openxr ).

These are the three IGL Shell Sessions -> vulkan_OpenXR applications

I meant HelloOpenXRSession :) It's only two of them now. This one and HandsOpenXRSession. _vulkan_openxr is a postfix added by CMake.
We can render any session technically, but only HelloOpenXRSession and HandsOpenXRSession have GL_OVR_multiview2 support, so we render them correctly on the headset.

For HelloOpenXRSession on Monado/Windows... when useSinglePassStereo_ = true; vs. false, there is different output. Not sure which (if either) is correct.

image

And when false...

image

Also note at tip of main I still see three openxr_vulkan cases listed and "Hands" isn't one of them (after running zero check) ... as expected on desktop

  if(IGL_WITH_OPENXR)
    if(ANDROID)
      add_shell_session(HelloOpenXRSession "")
      add_shell_session(HandsOpenXRSession "")
    endif()
    if(NOT ANDROID AND IGL_WITH_VULKAN)
      add_shell_session_openxr_desktop(ColorSession)
      add_shell_session_openxr_desktop(HelloOpenXRSession)
      add_shell_session_openxr_desktop(Textured3DCubeSession)
    endif()
  endif()

Sure, I'll check out why HelloOpenXRSession gives different results.

I don't think that the code bellow is 100% correct :) even it's in CMake.

      add_shell_session_openxr_desktop(ColorSession)
      add_shell_session_openxr_desktop(Textured3DCubeSession)

I'll handle it too. For now, please consider HelloOpenXRSession and HandsOpenXRSession as OpenXR compatible sessions.
(I'm not sure that HandsOpenXRSession makes sense on Monado, there Hands Tracking doesn't work...)

Hey @jzulauf-lunarg ! I added support for multi-pass stereo to HelloOpenXRSession and HandsOpenXRSession.