The open source OpenXR runtime
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

st/oxr: Guard against xsysc being NULL

+54
+20
src/xrt/state_trackers/oxr/oxr_api_system.c
··· 40 40 assert(system != NULL); \ 41 41 } while (false) 42 42 43 + #define OXR_VERIFY_XSYSC(LOG, SYS) \ 44 + do { \ 45 + if ((SYS)->xsysc == NULL) { \ 46 + return oxr_error((LOG), XR_ERROR_VALIDATION_FAILURE, \ 47 + " Function can not be called when specifically not asking for graphics"); \ 48 + } \ 49 + } while (false) 50 + 43 51 XRAPI_ATTR XrResult XRAPI_CALL 44 52 oxr_xrGetSystem(XrInstance instance, const XrSystemGetInfo *getInfo, XrSystemId *systemId) 45 53 { ··· 185 193 OXR_VERIFY_INSTANCE_AND_INIT_LOG(&log, instance, inst, "xrGetOpenGLESGraphicsRequirementsKHR"); 186 194 OXR_VERIFY_ARG_TYPE_AND_NOT_NULL(&log, graphicsRequirements, XR_TYPE_GRAPHICS_REQUIREMENTS_OPENGL_ES_KHR); 187 195 OXR_VERIFY_SYSTEM_AND_GET(&log, inst, systemId, sys); 196 + OXR_VERIFY_XSYSC(&log, sys); 188 197 189 198 struct xrt_api_requirements ver; 190 199 ··· 221 230 OXR_VERIFY_INSTANCE_AND_INIT_LOG(&log, instance, inst, "xrGetOpenGLGraphicsRequirementsKHR"); 222 231 OXR_VERIFY_ARG_TYPE_AND_NOT_NULL(&log, graphicsRequirements, XR_TYPE_GRAPHICS_REQUIREMENTS_OPENGL_KHR); 223 232 OXR_VERIFY_SYSTEM_AND_GET(&log, inst, systemId, sys); 233 + OXR_VERIFY_XSYSC(&log, sys); 224 234 225 235 struct xrt_api_requirements ver; 226 236 ··· 258 268 struct oxr_logger log; 259 269 OXR_VERIFY_INSTANCE_AND_INIT_LOG(&log, instance, inst, "xrGetVulkanInstanceExtensionsKHR"); 260 270 OXR_VERIFY_SYSTEM_AND_GET(&log, inst, systemId, sys); 271 + OXR_VERIFY_XSYSC(&log, sys); 261 272 262 273 return oxr_vk_get_instance_exts(&log, sys, namesCapacityInput, namesCountOutput, namesString); 263 274 } ··· 275 286 struct oxr_logger log; 276 287 OXR_VERIFY_INSTANCE_AND_INIT_LOG(&log, instance, inst, "xrGetVulkanDeviceExtensionsKHR"); 277 288 OXR_VERIFY_SYSTEM_AND_GET(&log, inst, systemId, sys); 289 + OXR_VERIFY_XSYSC(&log, sys); 278 290 279 291 return oxr_vk_get_device_exts(&log, sys, namesCapacityInput, namesCountOutput, namesString); 280 292 } ··· 296 308 OXR_VERIFY_INSTANCE_AND_INIT_LOG(&log, instance, inst, "xrGetVulkanGraphicsDeviceKHR"); 297 309 OXR_VERIFY_SYSTEM_AND_GET(&log, inst, systemId, sys); 298 310 OXR_VERIFY_ARG_NOT_NULL(&log, vkPhysicalDevice); 311 + OXR_VERIFY_XSYSC(&log, sys); 299 312 300 313 return oxr_vk_get_physical_device(&log, inst, sys, vkInstance, vkGetInstanceProcAddr, vkPhysicalDevice); 301 314 } ··· 314 327 315 328 OXR_VERIFY_SYSTEM_AND_GET(&log, inst, getInfo->systemId, sys); 316 329 OXR_VERIFY_ARG_NOT_NULL(&log, vkPhysicalDevice); 330 + OXR_VERIFY_XSYSC(&log, sys); 317 331 318 332 return oxr_vk_get_physical_device(&log, inst, sys, getInfo->vulkanInstance, vkGetInstanceProcAddr, 319 333 vkPhysicalDevice); ··· 331 345 OXR_VERIFY_INSTANCE_AND_INIT_LOG(&log, instance, inst, "xrGetVulkanGraphicsRequirementsKHR"); 332 346 OXR_VERIFY_SYSTEM_AND_GET(&log, inst, systemId, sys); 333 347 OXR_VERIFY_ARG_TYPE_AND_NOT_NULL(&log, graphicsRequirements, XR_TYPE_GRAPHICS_REQUIREMENTS_VULKAN_KHR); 348 + OXR_VERIFY_XSYSC(&log, sys); 334 349 335 350 return oxr_vk_get_requirements(&log, sys, graphicsRequirements); 336 351 } ··· 349 364 /* XR_TYPE_GRAPHICS_REQUIREMENTS_VULKAN2_KHR aliased to 350 365 * XR_TYPE_GRAPHICS_REQUIREMENTS_VULKAN_KHR */ 351 366 OXR_VERIFY_ARG_TYPE_AND_NOT_NULL(&log, graphicsRequirements, XR_TYPE_GRAPHICS_REQUIREMENTS_VULKAN_KHR); 367 + OXR_VERIFY_XSYSC(&log, sys); 352 368 353 369 return oxr_vk_get_requirements(&log, sys, graphicsRequirements); 354 370 } ··· 372 388 373 389 OXR_VERIFY_ARG_NOT_NULL(&log, createInfo->pfnGetInstanceProcAddr); 374 390 OXR_VERIFY_ARG_NOT_NULL(&log, createInfo->vulkanCreateInfo); 391 + OXR_VERIFY_XSYSC(&log, sys); 375 392 376 393 // createInfo->vulkanAllocator can be NULL 377 394 ··· 409 426 410 427 OXR_VERIFY_ARG_NOT_NULL(&log, sys->suggested_vulkan_physical_device); 411 428 OXR_VERIFY_ARG_NOT_NULL(&log, sys->vulkan_enable2_instance); 429 + OXR_VERIFY_XSYSC(&log, sys); 412 430 413 431 if (sys->suggested_vulkan_physical_device != createInfo->vulkanPhysicalDevice) { 414 432 return oxr_error(&log, XR_ERROR_HANDLE_INVALID, ··· 442 460 OXR_VERIFY_INSTANCE_AND_INIT_LOG(&log, instance, inst, "xrGetD3D11GraphicsRequirementsKHR"); 443 461 OXR_VERIFY_ARG_TYPE_AND_NOT_NULL(&log, graphicsRequirements, XR_TYPE_GRAPHICS_REQUIREMENTS_D3D11_KHR); 444 462 OXR_VERIFY_SYSTEM_AND_GET(&log, inst, systemId, sys); 463 + OXR_VERIFY_XSYSC(&log, sys); 445 464 446 465 sys->gotten_requirements = true; 447 466 ··· 469 488 OXR_VERIFY_INSTANCE_AND_INIT_LOG(&log, instance, inst, "xrGetD3D12GraphicsRequirementsKHR"); 470 489 OXR_VERIFY_ARG_TYPE_AND_NOT_NULL(&log, graphicsRequirements, XR_TYPE_GRAPHICS_REQUIREMENTS_D3D12_KHR); 471 490 OXR_VERIFY_SYSTEM_AND_GET(&log, inst, systemId, sys); 491 + OXR_VERIFY_XSYSC(&log, sys); 472 492 473 493 sys->gotten_requirements = true; 474 494
+9
src/xrt/state_trackers/oxr/oxr_d3d.cpp
··· 44 44 LUID *adapter_luid, 45 45 D3D_FEATURE_LEVEL *min_feature_level) 46 46 { 47 + if (sys->xsysc == NULL) { 48 + return oxr_error(log, XR_ERROR_RUNTIME_FAILURE, " sys->xsysc == NULL"); 49 + } 50 + 47 51 try { 48 52 49 53 if (sys->xsysc->info.client_d3d_deviceLUID_valid) { ··· 75 79 XrResult 76 80 oxr_d3d_check_luid(struct oxr_logger *log, struct oxr_system *sys, LUID *adapter_luid) 77 81 { 82 + if (sys->xsysc == NULL) { 83 + return oxr_error(log, XR_ERROR_RUNTIME_FAILURE, " sys->xsysc == NULL"); 84 + } 85 + 78 86 if (adapter_luid->HighPart != sys->suggested_d3d_luid.HighPart || 79 87 adapter_luid->LowPart != sys->suggested_d3d_luid.LowPart) { 80 88 81 89 return oxr_error(log, XR_ERROR_GRAPHICS_DEVICE_INVALID, 82 90 " supplied device does not match required LUID."); 83 91 } 92 + 84 93 return XR_SUCCESS; 85 94 }
+21
src/xrt/state_trackers/oxr/oxr_session.c
··· 699 699 return XR_SUCCESS; 700 700 } 701 701 702 + #define OXR_CHECK_XSYSC(LOG, SYS) \ 703 + do { \ 704 + if (sys->xsysc == NULL) { \ 705 + return oxr_error(log, XR_ERROR_VALIDATION_FAILURE, \ 706 + " Can not use graphics bindings when have asked to not create graphics"); \ 707 + } \ 708 + } while (false) 702 709 703 710 #define OXR_ALLOCATE_NATIVE_COMPOSITOR(LOG, XSI, SESS) \ 704 711 do { \ ··· 739 746 XrGraphicsBindingOpenGLXlibKHR const *opengl_xlib = OXR_GET_INPUT_FROM_CHAIN( 740 747 createInfo, XR_TYPE_GRAPHICS_BINDING_OPENGL_XLIB_KHR, XrGraphicsBindingOpenGLXlibKHR); 741 748 if (opengl_xlib != NULL) { 749 + OXR_CHECK_XSYSC(log, sys); 750 + 742 751 if (!sys->gotten_requirements) { 743 752 return oxr_error(log, XR_ERROR_GRAPHICS_REQUIREMENTS_CALL_MISSING, 744 753 "Has not called " ··· 756 765 XrGraphicsBindingOpenGLESAndroidKHR const *opengles_android = OXR_GET_INPUT_FROM_CHAIN( 757 766 createInfo, XR_TYPE_GRAPHICS_BINDING_OPENGL_ES_ANDROID_KHR, XrGraphicsBindingOpenGLESAndroidKHR); 758 767 if (opengles_android != NULL) { 768 + OXR_CHECK_XSYSC(log, sys); 769 + 759 770 if (!sys->gotten_requirements) { 760 771 return oxr_error(log, XR_ERROR_GRAPHICS_REQUIREMENTS_CALL_MISSING, 761 772 "Has not called " ··· 772 783 XrGraphicsBindingOpenGLWin32KHR const *opengl_win32 = OXR_GET_INPUT_FROM_CHAIN( 773 784 createInfo, XR_TYPE_GRAPHICS_BINDING_OPENGL_WIN32_KHR, XrGraphicsBindingOpenGLWin32KHR); 774 785 if (opengl_win32 != NULL) { 786 + OXR_CHECK_XSYSC(log, sys); 787 + 775 788 if (!sys->gotten_requirements) { 776 789 return oxr_error(log, XR_ERROR_GRAPHICS_REQUIREMENTS_CALL_MISSING, 777 790 "Has not called xrGetOpenGLGraphicsRequirementsKHR"); ··· 787 800 XrGraphicsBindingVulkanKHR const *vulkan = 788 801 OXR_GET_INPUT_FROM_CHAIN(createInfo, XR_TYPE_GRAPHICS_BINDING_VULKAN_KHR, XrGraphicsBindingVulkanKHR); 789 802 if (vulkan != NULL) { 803 + OXR_CHECK_XSYSC(log, sys); 804 + 790 805 OXR_VERIFY_ARG_NOT_ZERO(log, vulkan->instance); 791 806 OXR_VERIFY_ARG_NOT_ZERO(log, vulkan->physicalDevice); 792 807 if (vulkan->device == VK_NULL_HANDLE) { ··· 824 839 XrGraphicsBindingEGLMNDX const *egl = 825 840 OXR_GET_INPUT_FROM_CHAIN(createInfo, XR_TYPE_GRAPHICS_BINDING_EGL_MNDX, XrGraphicsBindingEGLMNDX); 826 841 if (egl != NULL) { 842 + OXR_CHECK_XSYSC(log, sys); 843 + 827 844 if (!sys->gotten_requirements) { 828 845 return oxr_error(log, XR_ERROR_GRAPHICS_REQUIREMENTS_CALL_MISSING, 829 846 "Has not called " ··· 841 858 OXR_GET_INPUT_FROM_CHAIN(createInfo, XR_TYPE_GRAPHICS_BINDING_D3D11_KHR, XrGraphicsBindingD3D11KHR); 842 859 if (d3d11 != NULL) { 843 860 // we know the fields of this struct are OK by now since they were checked with XrSessionCreateInfo 861 + 862 + OXR_CHECK_XSYSC(log, sys); 844 863 845 864 if (!sys->gotten_requirements) { 846 865 return oxr_error(log, XR_ERROR_GRAPHICS_REQUIREMENTS_CALL_MISSING, ··· 864 883 OXR_GET_INPUT_FROM_CHAIN(createInfo, XR_TYPE_GRAPHICS_BINDING_D3D12_KHR, XrGraphicsBindingD3D12KHR); 865 884 if (d3d12 != NULL) { 866 885 // we know the fields of this struct are OK by now since they were checked with XrSessionCreateInfo 886 + 887 + OXR_CHECK_XSYSC(log, sys); 867 888 868 889 if (!sys->gotten_requirements) { 869 890 return oxr_error(log, XR_ERROR_GRAPHICS_REQUIREMENTS_CALL_MISSING,
+4
src/xrt/state_trackers/oxr/oxr_vulkan.c
··· 486 486 VkResult vk_ret; 487 487 uint32_t count; 488 488 489 + if (sys->xsysc == NULL) { 490 + return oxr_error(log, XR_ERROR_RUNTIME_FAILURE, " sys->xsysc == NULL"); 491 + } 492 + 489 493 vk_ret = vkEnumeratePhysicalDevices(vkInstance, &count, NULL); 490 494 if (vk_ret != VK_SUCCESS) { 491 495 return oxr_error(log, XR_ERROR_RUNTIME_FAILURE, "Call to vkEnumeratePhysicalDevices returned %u",