Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/138.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 为什么openxr';xrCreateSession';导致了许多vulkan“;SPIR-V模块无效:";验证错误(以及如何修复它)?_C++_Vulkan_Openxr - Fatal编程技术网

C++ 为什么openxr';xrCreateSession';导致了许多vulkan“;SPIR-V模块无效:";验证错误(以及如何修复它)?

C++ 为什么openxr';xrCreateSession';导致了许多vulkan“;SPIR-V模块无效:";验证错误(以及如何修复它)?,c++,vulkan,openxr,C++,Vulkan,Openxr,xrCreateSession接受XrInstance和XrSessionCreateInfo 用于创建实例的XrInstanceCreateInfo并不特别有趣:唯一值得注意的参数是enabledExtensionCount(=1)和enabledExtensionNames(=XR_KHR_VULKAN_ENABLE_EXTENSION_NAME)。其余为任意标题/版本信息 用于创建会话的XRSessionCreateInfo将systemId设置为xrGetSystem的结果,并将next

xrCreateSession
接受
XrInstance
XrSessionCreateInfo

用于创建实例的
XrInstanceCreateInfo
并不特别有趣:唯一值得注意的参数是
enabledExtensionCount
=1
)和
enabledExtensionNames
=XR_KHR_VULKAN_ENABLE_EXTENSION_NAME
)。其余为任意标题/版本信息

用于创建会话的
XRSessionCreateInfo
systemId
设置为
xrGetSystem
的结果,并将
next
设置为
XrGraphicsBindingVulkanKHR
类型的指针

它的值只指向vulkan实例、physicalDevice、device、queueFamilyIndex和queueIndex,我有理由相信我收集的数据是正确的(没有openXR,vulkan工作正常)

但是第二个
xrCreateSession
被调用,我得到大约20个以下形式的验证错误:

Validation Error: [ UNASSIGNED-CoreValidation-Shader-InconsistentSpirv ] Object 0: handle = 0x24341691190, type = VK_OBJECT_TYPE_DEVICE; | MessageID = 0x6bbb14 | SPIR-V module not valid: Header block 512[%512] is contained in the loop construct headed by 505[%505], but its merge block 513[%513] is not
  %512 = OpLabel
(标题栏、标题栏、合并栏等编号不同。)

目前我还没有向vulkan和openXR提供任何SPIR-V,所以我不确定我能控制什么


为什么我会犯这些错误?可以采取什么措施来防止它们?

我不确定,但我猜测XR的实现需要在以后的调用中调用着色器,并在
xrCreateSession
期间加载这些着色器。因此,如果这些着色器模块在某种程度上无效,您将在xrCreateSession期间看到验证错误。如果从调试消息回调中获得堆栈跟踪,并且堆栈上有
xrCreateSession
,我会向OpenXR供应商报告一个错误。这也可能是由隐式Vulkan层引起的。有各种各样的工具和应用程序安装隐式加载的Vulkan层,这些工具和应用程序也会触发验证层错误。在Windows上,您可以在计算机\HKEY\U LOCAL\U MACHINE\SOFTWARE\Khronos\Vulkan\ImplicitLayers注册表项中禁用它们,方法是将它们的值设置为1或简单地重命名整个注册表项。如果验证层错误消失,那么它就是其中一个隐式层。我不确定,但我猜测XR的实现需要在以后的调用中调用着色器,并在
xrCreateSession
期间加载这些着色器。因此,如果这些着色器模块在某种程度上无效,您将在xrCreateSession期间看到验证错误。如果从调试消息回调中获得堆栈跟踪,并且堆栈上有
xrCreateSession
,我会向OpenXR供应商报告一个错误。这也可能是由隐式Vulkan层引起的。有各种各样的工具和应用程序安装隐式加载的Vulkan层,这些工具和应用程序也会触发验证层错误。在Windows上,您可以在计算机\HKEY\U LOCAL\U MACHINE\SOFTWARE\Khronos\Vulkan\ImplicitLayers注册表项中禁用它们,方法是将它们的值设置为1或简单地重命名整个注册表项。如果验证层错误消失,那么它就是其中一个隐式层。